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

Twitter ツイート Hatena Bookmark ブックマーク

昨日書いた記事ですが、今日やったらすぐに解決できました。
ただ単純に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

1
2

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

b.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?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
Built with Hugo
テーマ StackJimmy によって設計されています。