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

Yasuo Ohgaki php-users@php.gr.jp
Wed, 26 Jun 2002 19:05:18 +0900


大垣です。

>>  ブラウザが POST する文字コードは、ページが記述されている文字コードに
>>合わせるというのは、まぁ一般的な挙動だと思いますが、GET に関してはその
>>ような前提も全くないのが現状だと思います。
> 
> 
> ブラウザからサーバーに送られる文字コードは基本的には信用していません。
> 上記の用にPOST する文字コードにかぎってページ(HTML)自体の文字コードで
> 送信されるという話ははじめて聞きました。これは確かでしょうか?

私の記憶では仕様です。が、いいかげんなエンコーディングで送
信してくる古い(?)ブラウザがあるようです。

HTMLの仕様ではフィールド毎にエンコーディングを指定
する事もできます。この機能はヨーロッパでは便利かもし
れませんが、日本は必要ない機能と思います。

> GET で前提がないのはHTTP の仕様なのでしょうか?

HTTPではなく、HTMLの仕様なのでHTML4.0.1の仕様を見てみ
ました。

http://www.w3.org/TR/1999/REC-html401-19991224/
の 17.13.3 Processing form dataには

=======
Step three: Encode the form data set

The form data set is then encoded according to
the content type specified by the enctype
attribute of the FORM element.
=======

と書かれています。この事からHTML4ではGETもContent-Type
と同じ文字エンコーディングを使う事になっていると理解してい
ます。

# DTDを宣言をしてもブラウザいい加減なエンコーディングを送って
# くるのは自由です(ブラウザが古いとか)
# HTML 3.2や2.0がどうなっているか私は覚えていません :)

> 
> 
>>  日本語を GET で渡すということも、よほどの理由がなければそもそもやら
>>ないような...。
> 
> 
> よく,リンクで日本語を渡しているサイトを伺います。

日本語をURLエンコードなしで渡しているという事でしょうか?
IEでは気前よく自己判断してくれて動作するかもしれませんが、
普通はエンコードして渡します。(というか標準ではエンコード
する事になっています)

> その他,メソッドをGET にする理由としてキャッシュの問題もあります。
> IE で「戻る」ボタンにてページを戻る際によく起こる「ページの期限きれ」の問題を
> 回避する為にGET メソッドは多用します。

今はGETの時におかしなエンコーディングで送信するブラウザ
は死滅したと思います。(と願っています。PDA等はどうなん
でしょうか?)

日本語テキストを取り扱い、石橋を叩いてわたる場合はPOST
が良いと思いますが、GETでも普通は問題ありません。

PS:仕様に疑問をもった場合、自分で読まれる事をお奨めします。
かなりいい勉強になります。

--
Yasuo Ohgaki