[PHP-users 8297] Re: GET メソッドでの文字化けについて

岩田大樹 php-users@php.gr.jp
Wed, 26 Jun 2002 18:00:19 +0900


岩田です。

皆様,お返事ありがとうです。

あれから皆様の意見を元にいろいろと検証していました。その結果も伏せて
お返事します。

> > mb_detect_encoding にて文字化けした文字列のコードを調べたところ
> > UTF-8 でした。
>   Internet Explorer には「常にUTF-8としてURLを送信する」という設定があ
> りますが、もしやこれでは? 使用しているブラウザはなんでしょう?

使用しているブラウザはIE 5.5 で,上記の設定がオンになっておりました。
PHP の方ではクライアントから入力されてくる文字コードにUTF-8 は今回想定していま
せんでした。つまり,mbstring.http_input がEUC-JP, SJIS の順に設定してあったわけ
です。
そこで,mbstring.http_input をAUTO 又は EUC-JP,UTF-8 に変化させてaa.html より
GET メソッドで先と同様の操作をしてみました。

結果次のようになりました。
============================================================================
aa.html の「田中・北岡・岩田」をbb.html にsubmit すると・・
mb_detect_encoding -> EUC-JP
ブラウザでの表示された文字列 -> ナトテ譯ヲヒフイャ。ヲエ菁ト
ブラウザのエンコード -> EUC-JP
と表示される。
============================================================================

確かに文字列自体はEUC-JP ですが,ブラウザの方がご認識している(本来はブラ
ウザのエンコードがSHIFT_JISにならないとおかしい)らしくうまく表示できませんでした。

> > 私が思うにこれは【PHP によるコードご認識】ではないでしょうか?
> 
>   自動判別には、常に誤認識の危険がつきまといます。それが嫌ならば
> http_input を pass にして変換を行わないのが確実です。

確かにそうかもです。が、せっかくの自動判別機能。是非使いたいとは思います。

>   ブラウザが POST する文字コードは、ページが記述されている文字コードに
> 合わせるというのは、まぁ一般的な挙動だと思いますが、GET に関してはその
> ような前提も全くないのが現状だと思います。

ブラウザからサーバーに送られる文字コードは基本的には信用していません。
上記の用にPOST する文字コードにかぎってページ(HTML)自体の文字コードで
送信されるという話ははじめて聞きました。これは確かでしょうか?
GET で前提がないのはHTTP の仕様なのでしょうか?

>   日本語を GET で渡すということも、よほどの理由がなければそもそもやら
> ないような...。

よく,リンクで日本語を渡しているサイトを伺います。
その他,メソッドをGET にする理由としてキャッシュの問題もあります。
IE で「戻る」ボタンにてページを戻る際によく起こる「ページの期限きれ」の問題を
回避する為にGET メソッドは多用します。
そのときにフォームで日本語を入力しないなんてことはありませんよね?
このような場合にGET を用いるのは正論ではないでしょうか?

最終的にはaa.html のメソッドをPOST にすることで解決しましたが,上記の様に
意図的にGET を使用したい場合はきっと困ると思います。