polidog lab

Top About Rss
2008年07月18日

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

昨日書いた記事ですが、今日やったらすぐに解決できました。
ただ単純に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"));
    }
?>
<a href="<php? echo $url ?>">リンク</a>```

c.php

```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