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

打印_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适用于一维数组而不是多维数组。所以试试下面的功能

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 回答