[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 メーリングリストの案内