array_walk_recursive не может работать, когда я использую функцию 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

person Yuga    schedule 23.06.2016    source источник
comment
Может быть полезно stackoverflow.com/questions/2002710/   -  person    schedule 23.06.2016
comment
@Terminus Я решил это, спасибо!!!   -  person Yuga    schedule 23.06.2016


Ответы (2)


В определении 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)
person Osama Sayed    schedule 23.06.2016

Это связано с тем, что исходный массив не изменяется, если вы не измените его самостоятельно в функции обратного вызова.

Ваша функция обратного вызова в основном:

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!

Конечно, вы можете определить отдельную функцию, если хотите.

person jeroen    schedule 23.06.2016