[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 メーリングリストの案内