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