[PHP-users 21877]Re: Windows環境:postデータ文字エンコーディング変換 動作せず。

hideto.nakamura @ hideton.ddo.jp hideto.nakamura @ hideton.ddo.jp
2004年 5月 29日 (土) 12:37:44 JST


hideton です。

 私も同じような悩みを抱えていました。
 現象としては、SJISのページ(HTMLの出力エンコーディングがSJISの場合)で
ファイルアップロードすると、ファイル名に「能」など2バイト目が\5cの
場合にファイル名が欠けてしまうという問題でした。

> ためしに廣川様のサイトで配布されている
>     PHP 4.3.6,マルチバイト対応版v.1.02
> を使ってみたところ正しく変換してくれるようになりました。

 これであれば、問題は生じませんでした(一時期だめでしたが、廣川様に
対応頂きました)。これは、

>注意: PHP 4.3.3以降、HTMLフォームのenctypeが multipart/form-dataに
>設定され、かつ、 php.iniにおいて mbstring.encoding_translationにOnが
>指定されて いる場合、 POSTデータの変数とアップロードされたファイルの
>名前の 文字エンコーディングは、内部文字エンコーディングに変換されま
>す。 ただし、HTMLフォームのnameに指定した文字は変換されません。

の仕様が、
#define ZEND_MULTIBYTE 1
とされてコンパイルされることを前提として成り立っていることによると
理解しています。廣川様の「マルチバイト対応版」は、上記の定義が入っています。

 その後、私も「マルチバイト対応版」を利用させて頂いておりましたが、
最新版を使ってみたいという「新しい物好き」欲求から、現在は、
通常版(www.php.netで配布されているもの)で、ファイルのアップロードページ
のみの出力エンコーディングをeuc-jpにし、下記のような手順で
$_POSTを変換して対応しています。(これであれば、内部エンコーディングに
よらず、ファイル名の問題は生じませんでした)

$code = mb_convert_variables(mb_internal_encoding(),implode(",",
mb_detect_order()),$_POST);
if( isset($_FILES) ) {
	foreach( $_FILES as $key => $s ) {

mb_convert_variables(mb_internal_encoding(),$code,$_FILES[$key]);
	}
}




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