我正在使用一些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
Array ( [0] => Array ( [kategori_id] => 1 [kategori_adi] => Spor )
[1] => Array ( [kategori_id] => 2 [kategori_adi] => Siyaset ) )
如何将这些函数用于数组?
答案 0 :(得分: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编码。
答案 1 :(得分: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);