У меня есть массив значений, которые я хотел бы запускать через htmlspecialchars, но с таким аргументом, как:
$param = htmlspecialchars($param, ENT_QUOTES);
Проблема в том, что у меня есть массив значений, который я хочу запустить htmlspecialchars:
$array = array_map('htmlspecialchars', $array);
и я хотел бы знать, есть ли способ передать ENT_QUOTES в обратный вызов array_map?
Я всегда могу использовать свою собственную функцию, которая использует htmlspecialchars, но было бы неплохо, если бы был способ сделать это уже.
После ответа ниже, вот мой конечный результат:
$array = array_map('htmlspecialchars', $array, array_fill(0, count($array), ENT_QUOTES));
Это просто заполняет массив с таким количеством значений, как массив $ array, и заполняется ENT_QUOTE.
Это должно работать, если вы передадите второй массив в качестве параметра array_map
который будет содержать столько элементов ENT_QUOTES
сколько вашего количества элементов в $array
:
$quote_style = ENT_QUOTES; $array = array('"',"'","''''''''''''\""); $ent_quotes_array = array($quote_style, $quote_style, $quote_style); $array = array_map('htmlspecialchars', $array, $ent_quotes_array); print_r($array);
Или, немного более элегантно:
$array = array('"',"'","''''''''''''\""); $ent_quotes_array = array_fill(0, sizeof($array), ENT_QUOTES); $array = array_map('htmlspecialchars', $array, $ent_quotes_array);
Вот моя вспомогательная функция вывода …
function change_values_for_encode_output(&$item, $key) { $item = htmlentities($item, ENT_QUOTES); } function encode_output_vars($vars) { if(is_array($vars)) { array_walk_recursive($vars, 'change_values_for_encode_output'); return $vars; } else { $vars = htmlentities($vars, ENT_QUOTES); return $vars; } }