[PHP-users 13474] HTTP input encoding translation ?

Ryuzo KOSAKI php-users@php.gr.jp
Thu, 20 Feb 2003 23:19:49 +0900 (JST)


PHP4.3.0を使い始めて悩んでいます。

[現象]
formでinputされた2バイトコードが適切に内部コードに
変換されずそのままやってきます。

以下の部分でinputに "name" という名前でGET/POSTしたデータを受けてみると、
SJISと判定されてしまいます。判定だけでなく、たしかに中身も送信時のまま
SJISです。

<?php
  $name=$_REQUEST["name"];
  $enc = mb_detect_encoding($name);
  print "$enc<br>\n";
?>

[環境]
OS SunOS 5.8 Generic_108528-18 sun4u sparc
PHP Version 4.3.0

を以下のように作りました。

../configure' '--with-apxs=/usr/local/apache/bin/apxs'
 '--with-config-file-path=/usr/local/etc' '--without-mysql'
 '--enable-mbregex' '--enable-mbstring' '--enable-trans-sid'
 '--with-java=/usr/j2se' 

php.iniの日本語に関係する(と思っている)部分は下記のとおりです。

output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0

outputがSJISになってますが、これはこういう仕様と頼まれているの
で、悩みが発生しています。

この時、phpinfo();を見ると

   mbstring
Multibyte Support   enabled
Japanese support    enabled
Multibyte (japanese) regex support  enabled

となり、存在してほしい
HTTP input encoding translation enabled
の行がありません。

mbstring.encoding_translation はLocalValueもMasterValueもOnに
なっています。

ここでわからないのは、4.3.0でもFreeBSD4.7やSolaris 5.8 (Intel)
で同じオプションで作成したPHPを使った場合は、ちゃんとエンコー
ディングされてきて、 "HTTP input encoding translation enabled"
 も表示されるのです。php.iniは同じ物を使用しても、です。

同じマシンで4.2.2を使用した場合はちゃんと動くのですが、なぜか
4.3.0にするとダメになります。php.iniやconfigureをいじってもか
わりません。

似たような悩みをおもちの方はいるみたいですが、ちょっと違うよう
で私の現象にはあてはまらないようです。

どなたかわかる方、いらっしゃいませんか?


--
  小先隆三(こさきりゅうぞう)  Ryuzo KOSAKI <kosaki@fip.fujitsu.com>
  PGP Finger Print = 77AA B78E 7E40 B51D 4A74 A6E8 8A4C 1E0F