массив_карт и htmlentities - PullRequest
3 голосов
/ 05 февраля 2012

Я пытался с помощью array_map в преобразовать символы в объекты HTML с htmlentities() следующим образом:

$lang = array_map('htmlentities', $lang);

Мой массив выглядит так:

$lang = array();
$lang['var_char1']['varchar2'] = 'Some Text';

Но я продолжаю получать ошибки :

Предупреждение: htmlentities () ожидает, что параметр 1 будет строкой, массив указан в / home / user / public_html / foo/lang/en.inc.php в строке 1335

Кто-нибудь знает, в чем может быть проблема?Спасибо!

Ответы [ 5 ]

30 голосов
/ 05 февраля 2012

Использование array_walk_recursive. array_map не работает с многомерными массивами:

array_walk_recursive($lang, function (&$value) {
    $value = htmlentities($value);
});
6 голосов
/ 05 февраля 2012

Поскольку $ lang - это двумерный массив, он не будет работать

Для двумерного массива вам нужно использовать для цикла

foreach($$lang as &$l):
    $l = array_map('htmlentities', $l);
}
1 голос
/ 06 мая 2013

если вам нравятся кавычки


function stripslashes_array(&$arr) {
    array_walk_recursive($arr, function (&$val) {
        $val = htmlentities($val, ENT_QUOTES);
    });
}

множественный массив в записи, получите, dll

stripslashes_array($_POST);

stripslashes_array($_GET);

stripslashes_array($_REQUEST);

stripslashes_array($_COOKIE);
1 голос
/ 05 февраля 2012

array_map () не работает рекурсивно. Если вы знаете, что ваш массив всегда имеет два уровня глубины, вы можете перебрать его и использовать array_map для подмассивов.

1 голос
/ 05 февраля 2012

$lang['var_char1']['varchar2'] определяет многомерный массив, поэтому каждый элемент $lang также является массивом.array_map() перебирает $lang, передавая массив htmlentities() вместо строки.

...