[PHP-users 15450]Re: $HTTP_POST_VARSなどをarray_map()で処理する場合の問題について
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2003年 5月 22日 (木) 20:40:29 JST
桝形です。
> 【環境】
>
> OS : RedHat Linux6.2J
> Apache : 1.3.27
> PHP : 4.3.2RC3( DSO )
> この動作からすると、array_mapは配列が深すぎると駄目な
> 動作をしてるようですねぇ。。。使い方間違ってます?
別の関数で試してみました。
<?
print_r( $HTTP_GET_VARS );
$interenc = mb_internal_encoding( );
mb_convert_variables( $interenc, "SJIS-win", $HTTP_GET_VARS );
print_r( $HTTP_GET_VARS );
exit;
?>
http://www.example.com/test.php?W[][][]=1%81%78&X[][]=1&Y[]=1&Z=%81%78
----------------------------------------------------------------------
Array
(
[W] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 1』
)
)
)
[X] => Array
(
[0] => Array
(
[0] => 1
)
)
[Y] => Array
(
[0] => 1
)
[Z] => 』
)
----------------------------------------------------------------------
Array
(
[W] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 1(半角カナの"。ル")
)
)
)
[X] => Array
(
[0] => Array
(
[0] => 1
)
)
[Y] => Array
(
[0] => 1
)
[Z] => (半角カナの"。ル")
)
----------------------------------------------------------------------
という事で、mb_convert_variablesは問題ないようです。
最初に重松さんが仰られた
> > (2) array_map() は高速で、入れ子の問題も解決
という部分がarray_map()の正しい仕様でしたら、自分が試した
array_map()の動作はおかしい( Bug )って事になりますね。
この動作、こうなるのは自分の環境だけなのでしょうか?
この動作が仕様であれば素直にあきらめるんですけど、
重松さんの文面に( 最後の4行くらい )、
> > <?php
> > // dump.cgi
> > header('Content-type: plain/text');
> > var_dump($HTTP_GET_VARS);
> > ?>
> >
> > というスクリプトを用意して、コマンドラインから、
> >
> > $ w3m http://localhost/dump.cgi?x[][][]=x
> >
> > として簡単に配列を入れ子にできることは確認できました。
> > # php3 だとできなかったと記憶しています。
> >
> > また、
> >
> > $ w3m http://localhost/dump.cgi?
> >
> > では、空配列、
> >
> > $ w3m http://localhost/dump.cgi?x
> >
> > では、x がキーで、データが空の配列が返され、
> > 常に配列であることを確認しました。
> >
> > また、マニュアルには明記されていないようですが、array_map() は
> > 配列が入れ子になっていても、すべての配列でない要素に対して、
> > 再帰的に指定された関数を呼び出すようです。
> > (PHP 4.3.2RC2 でテストしました)
と、あるので、気になっています。
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内