たいしたことはなかった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

リンク```

c.php

<?php
    foreach($_GET as $key => $value){
        var_dump($value);
        $back_url .= "&$key=".urlencode(mb_convert_encoding($value,"SJIS","EUC-JP"));
    }
?>

<a href="<php? echo $back_ur ?>l">戻る</a>```
comments powered by Disqus