array_map和htmlentities

时间:2012-02-05 15:29:58

标签: php arrays html-entities

我一直在尝试使用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中

有谁知道可能是什么问题?谢谢!

6 个答案:

答案 0 :(得分:30)

使用array_walk_recursivearray_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);