PHP: как выполнить htmlspecialchar () на массиве массивов?

Как я выполняю функцию PHP htmlspecialchars() на массиве объектов массива?

У меня есть следующий код:

$result_set = Array
(
    [0] => Array
        (
            [home_id] => 1
            [address] => 4225 Nasmyth Dr
            [city] => Plano
            [state] => TX
            [zip] => 76798
        )

    [1] => Array
        (
            [home_id] => 8
            [address] => 4229 Nasmyth Dr
            [city] => Plano
            [state] => TX
            [zip] => 75093
        )
);

// this doesn't work since $result_set is an array of arrays and htmlspecialchars is expecting a string
htmlspecialchars($result_set, ENT_QUOTES, 'UTF-8')); 

ОБНОВЛЕНИЕ:

Обратите внимание на то, что даже при том, что существует довольно много ответов ниже, ни один из них не работает на массив массивов. Ответы ниже только работают на простые массивы.

Я попробовал следующее, но это не работает:

array_walk_recursive($result_set, "htmlspecialchars", array(ENT_QUOTES,'UTF-8'))

Я получаю следующую ошибку: htmlspecialchars() expects parameter 2 to be long, string given


ОБНОВЛЕНИЕ 2

Когда я пробую:

function cleanOutput(&$value) {
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
print_r($result_set);
print('-------');
print_r(array_walk_recursive($result_set, "cleanOutput"));

Я получаю следующее, нежелательное, произвожу:

Array
(
    [0] => Array
        (
            [home_id] => 1
            [address] => 4225 Nasmyth Dr
            [city] => Plano
            [state] => TX
            [zip] => 76798
        )
    [1] => Array
        (
            [home_id] => 8
            [address] => 4229 Nasmyth Dr
            [city] => Plano
            [state] => TX
            [zip] => 75093
        )
)
-------1

ОБНОВЛЕНИЕ 3

Когда я пробую:

function cleanOutput(&$value) {
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
$result_set = Array
    (
        [0] => Array
            (
                [home_id] => 1
                [address] => 4225 Nasmyth Dr
                [city] => Plano
                [state] => TX
                [zip] => 76798
            )

        [1] => Array
            (
                [home_id] => 8
                [address] => 4229 Nasmyth Dr
                [city] => Plano
                [state] => TX
                [zip] => 75093
            )
    );

$cleanedOutput = array();
foreach ($result_set as $rs) {
    $cleaned[] = array_map("cleanOutput", $rs);
}
print_r($cleanedOutput);

Я получаю следующее, нежелательное, результаты:

{'homes' : []}
14
задан 15 revs 5 January 2010 в 00:35
поделиться

5 ответов

function filter(&$value) {
  $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
array_walk_recursive($result_set, "filter");
print_r($result_set);
16
ответ дан 1 December 2019 в 06:31
поделиться

Можно использовать array_map() для запуска этого метода на каждой записи.

$cleaned = array_map("htmlspecialchars", $myArray);

Если вам нужно передать аргументы в htmlspecialchars(), то вы можете заменить их своей собственной пользовательской функцией:

function myFunc($a) {
  return htmlspecialchars($a, ENT_QUOES);
}

$cleaned = array_map("myFunc", $myArray);

Учитывая тот факт, что вы имеете дело с массивом массивов, а не с массивом строк, для того, чтобы добраться до ваших строк, вам нужно будет циклически прокручивать их через внешний массив:

$cleaned = array();
foreach ($result_set as $rs) {
  foreach ($rs as $r) {
    $cleaned[] = array_map("htmlspecialchars", $r);
  }
}

Или можно использовать array_walk_recursive():

array_walk_recursive($myArray, "htmlspecialchars");

Обратите внимание, что этот метод изменяет объект $myArray по ссылке, поэтому нет необходимости присваивать вывод новой переменной.

23
ответ дан 1 December 2019 в 06:31
поделиться

Если вы хотите использовать array_map и передать аргументы функции, то вы можете создать свою собственную функцию и использовать ее в качестве обратного вызова:

 function cleanhtml($dirtyhtml) {
       return htmlspecialchars($dirtyhtml, UTF-8);
  }

  $cleaned = array_map("cleanhtml", $myArray);
0
ответ дан 1 December 2019 в 06:31
поделиться
[

]Вы можете использовать array_map, как предложил Джонатон Сампсон, другой вариант - []array_walk[][

]. [

] Разница в том, что array_map возвращает копию массива с функцией, применяемой к каждому элементу, в то время как array_walk работает непосредственно с массивом, который Вы поставляете.[

].
4
ответ дан 1 December 2019 в 06:31
поделиться
[

] Вам не нужно создавать свою собственную функцию, если вы передаете несколько аргументов в вызываемую функцию обратного вызова. [

] [

] В соответствии с [] php.net []: [

] [

][] array_map ( обратный вызов $callback , массив $arr1 [, массив $... ] )[][

] [

] Это значит, что если вы хотите передать несколько аргументов, вы должны просто передать:[

] [
$clean_array = array_map("htmlspecialchars", $myArray, array(ENT_QUOTES, 'UTF-8'));
] [

] но по какой-то причине это не работает на меня. [

] [

] Но похоже, что это так, не спрашивай меня почему. [

] [
$clean_array = array_map("htmlspecialchars", $myArray, array(ENT_QUOTES), array('UTF-8'));
]
1
ответ дан 1 December 2019 в 06:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: