Php 如何在多维数组上应用函数?
为了安全起见,我使用了一些php函数Php 如何在多维数组上应用函数?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,为了安全起见,我使用了一些php函数 function whileToArray($qr) { while($rs = mysql_fetch_assoc($qr)) { $data[] = $rs; } $data = array_map('htmlspecialchars_decode',$data); $data = array_map('htmlentities',$data)
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
打印(数据):
如何在数组中使用这些函数?您应该在内部
循环中移动解码逻辑,而循环:
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编码。您应该在内部循环中移动解码逻辑,而循环:
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编码。适用于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);
适用于一维数组,不适用于多维数组。因此,请尝试使用下面的函数
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);
粘贴打印($data)
的结果我认为,$data
是多维关联数组。无论如何,你不应该在数据库中保留HTML编码的数据htmlencode()
只能在您实际希望将数据嵌入HTML的位置调用。@lanzz我在打印数据时使用htmlspecialchars\u decode。在数据库结果上调用htmlspecialchars\u decode()
表明您显然已经拥有数据htmlspecialchars()
-将其插入数据库时进行编码。这不是一个好方法。粘贴打印($data)
的结果我认为$data
是多维关联数组。无论如何,你不应该在数据库中保留HTML编码的数据htmlencode()
只能在您实际希望将数据嵌入HTML的位置调用。@lanzz我在打印数据时使用htmlspecialchars\u decode。在数据库结果上调用htmlspecialchars\u decode()
表明您显然已经拥有数据htmlspecialchars()
-将其插入数据库时进行编码。这不是一个好办法。