我一直在尝试使用array_map
将字符转换为HTML实体和htmlentities()
,如下所示:
$lang = array_map('htmlentities', $lang);
我的数组看起来像这样:
$lang = array();
$lang['var_char1']['varchar2'] = 'Some Text';
但我一直收到错误:
警告:htmlentities()期望参数1为字符串,给定数组 在第1335行的/home/user/public_html/foo/lang/en.inc.php中
有谁知道可能是什么问题?谢谢!
答案 0 :(得分:30)
使用array_walk_recursive
。 array_map
不适用于多维数组:
array_walk_recursive($lang, function (&$value) {
$value = htmlentities($value);
});
答案 1 :(得分:6)
因为$ lang是一个二维数组,所以它不起作用
对于二维数组,您需要使用for循环
foreach($$lang as &$l):
$l = array_map('htmlentities', $l);
}
答案 2 :(得分:1)
$lang['var_char1']['varchar2']
定义了一个多维数组,因此$lang
的每个元素也是一个数组。 array_map()
遍历$lang
,将数组传递给htmlentities()
而不是字符串。
答案 3 :(得分:1)
array_map()递归不起作用。如果你知道你的数组总是两层深,你可以遍历它并在子数组上使用array_map。
答案 4 :(得分:1)
如果你喜欢引用
function stripslashes_array(&$arr) {
array_walk_recursive($arr, function (&$val) {
$val = htmlentities($val, ENT_QUOTES);
});
}
post中的多个数组,get,dll
stripslashes_array($_POST);
stripslashes_array($_GET);
stripslashes_array($_REQUEST);
stripslashes_array($_COOKIE);
答案 5 :(得分:1)
$lang 中的每个元素都是一个数组,所以你传递给 array_map 的函数应该接受一个数组作为参数。对于采用字符串的 'htmlentities' 而言,情况并非如此。
您可以:
$map_htmlentities = function(array) { return array_map('htmlentities', array); };
然后
$lang = array_map($map_htmlentities, $lang);
从 PHP 7.4 开始,您可以使用 lambda:
$lang = array_map(fn($arr) => array_map('htmlentities', $arr), $lang);