当我使用函数htmlspecialchars时,array_walk_recursive不起作用?

时间:2016-06-23 04:29:44

标签: php 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

2 个答案:

答案 0 :(得分:1)

这是因为除非您在回调函数中自行修改原始数组,否则不会修改原始数组。

你的回调函数基本上是:

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!

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

答案 1 :(得分:1)

array_walk_recursive的定义中:

  

array_walk_recursive - 递归地向每个用户函数应用   数组成员

因此,您需要创建一个使用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)