たいしたことはなかったPHPの文字コード問題

July 18, 2008,
tags: euc-jp http_input http_output mb_convert_encoding php sjis urlencode 文字コード


このエントリーをはてなブックマークに追加

昨日書いた記事ですが、今日やったらすぐに解決できました。
ただ単純にhttp_outputとinputをSJISとして指定しています。で、script_encodingがEUC-JPなわけです。
ということはSJISの日本語文字をPOSTやGETなどの日本語は、PHP側が、EUC-JPとして解釈するわけです。

で、昨日の日記のスクリプトではurlencodeをしてGETのパラメータとして日本語文字をおくっているわけです。
ただ単純にurlencodeだけをかますと、EUC-JPの文字としてurlencodeされるわけです。
しかし、GETで送られたほうはそれをSJISと解釈してEUC-JPに変換してしまうのです。

なので、urlencodeする際にEUC-JPからSJISに戻すことにしたらあっけなく解決しました。

ob_start使っているので普通に使う分には気にしなくてよいのですが、urlencodeするときはEUCからSJISに意図的に変換してあげなければならないのですね。
勉強になりました…というかこのぐらいすぐ気づかなきゃだな。

とりあえず、解決できてよかったです。

昨日の修正コード

a.php


<input type="text" name="word" >```

b.php

<?php foreach($_GET as $key => $value){ var_dump($value);//テストで表示させています。 $url .= “&$key=“.urlencode(mb_convert_encoding($value,“SJIS”,“EUC-JP”)); } ?> l”>戻る```

comments powered by Disqus