array_walk_recursive 当我使用函数 htmlspecialchars 时无法工作?

array_walk_recursive can't work when I use function htmlspecialchars?

我使用 array_walk_recursive 将 htmlspecialchars 应用于我的数组值,但它不起作用,当我手动使用它时,htmlspecialchars 起作用; 这是我的代码:

 $new[] = "<a href='test'>Test</a><li><div>";
 var_dump(array_walk_recursive($new,'htmlspecialchars')); // true
 var_dump($new) ; // no change

那是因为原数组是不会被修改的,除非你自己在回调函数中修改它

你的回调函数基本上是:

function($item, $key) {
    htmlspecialchars($item);
}

因此在调用该函数时,不会存储任何内容,也不会更改原始数组。

如果要修改函数中的值,可以传引用:

function(&$item, $key) {
    $item = htmlspecialchars($item);
}

所以结果看起来像:

 $new[] = "<a href='test'>Test</a><li><div>";
 array_walk_recursive($new, function(&$item, $key) {
        $item =  htmlspecialchars($item);
 });
 var_dump($new) ; // change!

如果您愿意,当然可以定义一个单独的函数。

array_walk_recursive的定义中:

array_walk_recursive — Apply a user function recursively to every member of an array

因此您需要创建一个使用 htmlspecialchars 的用户定义函数,如下所示:

$new[] = "<a href='test'>Test</a><li><div>";
array_walk_recursive($new, "specialChars");
var_dump($new);

function specialChars(&$value) {
    $value = htmlspecialchars($value);
}

这将打印:

array (size=1)
  0 => string '&lt;a href='test'&gt;Test&lt;/a&gt;&lt;li&gt;&lt;div&gt;' (length=56)