0

セキュリティのためにいくつかのphp関数を使用しています。

function whileToArray($qr)
    {
        while($rs = mysql_fetch_assoc($qr))
        {
            $data[] = $rs;
        }
        $data = array_map('htmlspecialchars_decode',$data);
        $data = array_map('htmlentities',$data);
        return $data;
    }

このコードを実行すると、次のようになります。

Warning: htmlspecialchars_decode() expects parameter 1 to be string, array given in C:\AppServ\www\bigbeng\classes\get.class.php on line 22
Warning: htmlspecialchars_decode() expects parameter 1 to be string, array given in C:\AppServ\www\bigbeng\classes\get.class.php on line 22

print_r($データ):

Array ( [0] => Array ( [kategori_id] => 1 [kategori_adi] => Spor )
        [1] => Array ( [kategori_id] => 2 [kategori_adi] => Siyaset ) )

これらの関数を配列で使用するにはどうすればよいですか?

4

2 に答える 2

2

デコード ロジックを内側のwhileループ内に移動する必要があります。

function whileToArray($qr)
{
    while($rs = mysql_fetch_assoc($qr))
    {
        $rs = array_map('htmlspecialchars_decode',$rs);
        $rs = array_map('htmlentities',$rs);
        $data[] = $rs;
    }
    return $data;
}

ただし、これは非常に間違ったアプローチです。あなたのロジックは、データベースに保存されているすべてのデータが HTML でエンコードされていることを前提としています。ID、数値、タイムスタンプ、すべて。データベース内のデータをHTML エンコードしないでください。HTML エンコードは、実際に HTML に値を埋め込みたい場合にのみ実行する必要があります。

于 2012-07-17T09:06:55.517 に答える
2

array_map多次元配列ではなく、1D 配列で動作します。以下の関数で試してください

function array_map_recursive($fn, $arr) {
    $rarr = array();
    foreach ($arr as $k => $v) {
        $rarr[$k] = is_array($v)
            ? array_map_recursive($fn, $v)
            : $fn($v); // or call_user_func($fn, $v)
    }
    return $rarr;
}

それから電話する

 $data = array_map_recursive('htmlspecialchars_decode',$data);
于 2012-07-17T09:13:26.813 に答える