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

Moriyoshi Koizumi php-users@php.gr.jp
Thu, 27 Jun 2002 03:49:51 +0900


小泉@町田です。

ちょっと興味があったので。

始めに触れておきますが、やはり仕様上は POST を使うしかないみたいですね。
ページの賞味期限切れは、POST されたデータを受けたら、
Header( "Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}" )
などとして、すぐ自分自身へ飛ばすようにすれば、回避できるのでは?

hiji@tomeibus.com (OHTA Hideki) wrote:
--snip--
> >HTMLの仕様ではフィールド毎にエンコーディングを指定
> >する事もできます。この機能はヨーロッパでは便利かもし
> >れませんが、日本は必要ない機能と思います。
> 
> ???
> そんな仕様は(少なくともHTML4.01には)ありません。
> accept-charset属性はform要素にしか適用できません。
> 

INPUT エレメントに関して、ドキュメントを見ると、
"Attributes defined elsewhere" のところで
accept について言及されているのですが、DTD を見ると、%attrs エンティティで
参照される3つのエンティティ(%i18nなど)の中には accept はありません。
ついでに TEXTAREA を見てみると、こちらは accept について全く触れてないようです。
もしかしたら、仕様書のバグかもしれないですね。

> >> GET で前提がないのはHTTP の仕様なのでしょうか?
> >
> >HTTPではなく、HTMLの仕様なのでHTML4.0.1の仕様を見てみ
> >ました。
> >
> >http://www.w3.org/TR/1999/REC-html401-19991224/
> >の 17.13.3 Processing form dataには
> (snip)
> >と書かれています。この事からHTML4ではGETもContent-Type
> >と同じ文字エンコーディングを使う事になっていると理解してい
> >ます。
> 
> それより前の17.13.1に、
> ====
> Note. The "get" method restricts form data set values to
>  ASCII characters. Only the "post" method (with
>  enctype="multipart/form-data") is specified to cover the
>  entire [ISO10646] character set.
> ====
> と書かれています。
> GETメソッド(およびPOSTメソッドのenctype="application/x-www-form-urlencoded")
> では、そもそもASCII以外の文字を送信することができません。

17.3.3. にも、

If the method is "get" and the action is an HTTP URI, the user agent takes the value of action, appends a `?' to it, then appends the form data set, encoded using the "application/x-www-form-urlencoded" content type. The user agent then traverses the link to this URI. In this scenario, form data are restricted to ASCII codes. 

こんなことが書いてありました。

Content-Type が添えられていないデータはすべて ASCII である、というのが
この仕様のポリシーみたいですね。
それにもかかわらず、POST でもきちんとした Content-Type が
添えられていないというのは、非常にこまったことです。。。

蛇足:Macromedia FLASH 5でも、LoadVariables を使って GET でデータを送信すると、
文字コードがおかしくなることがたまにあります。*nix だとマルチバイト文字は全滅?

# FLASH MX では直ったかもしれないです。