我使用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
答案 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 '<a href='test'>Test</a><li><div>' (length=56)