[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