[PHP-users 14281] Re: getでの文字コード対策
Osamu Shigematsu
php-users@php.gr.jp
2003年 3月 25日 (火) 07:00:05 JST
重松です。こんにちは。
> 呼び出したURLと変数の値、
>
> fncGetAdr.php?txtAddress1=福岡市博多区博多駅前
>
> fncGetAdr.phpが受け取った値、
>
> echo $txtAddress1;
> 福岡市縛淇区縛淇駅前
>
> echo var_dump(unpack('H*',$_GET['txtAddress1']));
> array(1) { [""]=> string(40)"caa1b2acbbd4c7fbdebfb6e8c7fbdebfb1d8c1b0" }
>
> となりました。
福岡市博多区博多駅前 を EUC で保存して od -tx1 で dump をとったら、
0000000 ca a1 b2 ac bb d4 c7 ee c2 bf b6 e8 c7 ee c2 bf
0000020 b1 d8 c1 b0 0a
0000025
となりました。
# 最後の 0a は LF です。vi が勝手にくっつける。:)
で、比べてみると、
ca a1 b2 ac bb d4 c7 ee c2 bf b6 e8 c7 ee c2 bf b1 d8 c1 b0
ca a1 b2 ac bb d4 c7 fb de bf b6 e8 c7 fb de bf b1 d8 c1 b0
^^ ^^ ^^ ^^
の部分が化けてますが、あんまり規則性がわかりませんね。これだけだと。
いずれにしても、GET で URL に埋め込む形でマルチバイト文字をそのまま渡すと、
文字化けしてしまうので、上記の規則性から文字化けの理由を突き止めて、
それが PHP 側の問題ならば、対処できる可能性もありますが、
ブラウザの問題 (UTF-8 に変換して送るようになっているものが多いが、
結局ばらばら) ならお手上げなので、以下のような対策はどうでしょうか。
(1) URL エンコード + 最初の 2 文字を美乳にして、
受け取ったデータの頭 4 バイトを捨てる。
# 美乳は別に他意はありません。:)
# http://ns1.php.gr.jp/pipermail/php-users/2003-March/014298.html
(2) 16進数にしてしまう。PHP 側は、pack() でもとに戻せます。
--
Osamu Shigematsu <m5issige@mr.hitachi-medical.co.jp>
PHP-users メーリングリストの案内