[PHP-users 29740] Re: Q.西や表などの一部の漢字がPOSTできないのです。

高橋政利 takahashi @ hoshino-dk.co.jp
2006年 7月 12日 (水) 20:42:35 JST


高橋です。

> たぶん送信される日本語が短すぎて文字コードの判別に失敗しているのでしょう。

なるほど。なんとなく見えてきたような気がします。
mbstring.http_input = auto
になっているのですが、この時の判定(ASCII,JIS,UTF-8,EUC-JP,SJISのいずれか)
がうまく行っていない。つまり短すぎて分からないということなんでしょうか?
試しに
mbstring.http_input = EUC-JP
と明示して
mbstring.encoding_translation = On
に戻してみましたら、問題なく「西」も「表」も「星」も動作します。
まとめてみますと、

mbstring.http_input
  HTTPより入力する文字を指定(autoは自動判定)
mbstring.http_output
  HTTPに出力する文字を指定
mbstring.encoding_translation
  入力された文字のコードをPHPの内部コードに変換するか否か
mbstring.internal_encoding
  PHPの内部コードを指定

つまり、不具合の原因は
文字を入力 > 文字が短くて判定不可能 > PHPが入力文字コード誤認識 
> 内部コードと入力文字コードが違うので誤変換 > 文字化け
対策方法は、色々ありますけど
mbstring.http_input = EUC-JP
と明示してあげた方がEUC-JPで統一している場合はスッキリしているような気も
します。携帯端末からの入力はどうなるんでしょう・・・・。




PHP-users メーリングリストの案内