[PHP-users 17156]Re: EUC-JPで特定の文字のエンコードがうまくいかない【解決編】

Yumiko Ono yumi @ pise.co.jp
2003年 8月 5日 (火) 16:45:52 JST


投稿者の大野です。
重松さま、石塚さま、ありがとうございました。
解決いたしましたので、ご報告いたします。

〔解決策〕
mbstring.http_input = "EUC-JP, eucJP-win, ASCII, JIS, UTF-8, SJIS"
とすることで解決しました。

*投稿時に情報が少なかったので補足します*
〔現象〕
・ある画面から、2バイト文字を含む文字をパラメータとして引渡します。
 そのときのHTML
  <a href="nextpage.php?keyword=%C8%AF%C3%A3">発達</a>
 PHPのソースはこうです。
  print ("<a href=\"nextpage.php?keyword=".urlencode($keyword)."\">") ;
・受取り側のページは、
  $receive = urldecode ($_GET["keyword"]) ;
 というかたちで受け取って、表示します。
・このとき、特定の文字コードに関して、
 文字化けしている、または、スペースになってしまう。

〔調べたところ〕
・特定の文字コードとは、EUC コード で
 「cXa1」〜「cXbf」
 「dXa1」〜「dXbf」
 「eXa1」〜「eXbf」
 に該当する文字でした。
・また、urlencode は、あってもなくても現象は同じでした。

〔対処〕
・重松さまのご指摘のとおり、phpinfo()で設定を確認し、
 以下のように変更してみました。
> mbstring.http_input = auto
> mbstring.detect_order = auto
   ↓
 mbstring.http_input = "EUC-JP, eucJP-win, ASCII, JIS, UTF-8, SJIS"
 mbstring.detect_order = "EUC-JP, eucJP-win, ASCII, JIS, UTF-8, SJIS"

・上記で解決しました。
 結局、
 mbstring.http_input = "EUC-JP, eucJP-win, ASCII, JIS, UTF-8, SJIS"
 mbstring.detect_order = auto
 でもOKなので、mbstring.http_input のほうが有効のようです。

〔原因の推測〕
・これも説明不足でしたが、ブラウザは、IE6.0です。
 石塚さまのご指摘にありましたように、
 ブラウザが、文字コードを自動判別し、エンコードしていたのでは?
(IE は、METAタグにcharset=euc-jpとあってもSJISを問題なく表示します)

・ということで、もうお気づきだと思いますが、上記のソースの場合は、
 mbstring.http_input = pass
 でも解決です。

長くなりましたが、過去ログとして誰かのお役にたてたら幸いです。
ありがとうございました。


//--------------------------------------
// 大野 由美子 / yumi @ pise.co.jp
//
// ピセ株式会社  システム技術グループ
// 〒105-0012
//   東京都港区芝大門 1-3-8
//   アトラス芝大門ビル 5F
// TEL 03-5402-6930  FAX 03-3432-1310
//--------------------------------------


PHP-users メーリングリストの案内