Есть ли способ отправить параметры в функцию обратного вызова без предварительного создания собственной функции? - PullRequest
5 голосов
/ 10 декабря 2011

У меня есть массив значений, которые я хотел бы запустить через 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.

Ответы [ 2 ]

3 голосов
/ 10 декабря 2011

Это должно сработать, если вы передадите второй массив в качестве параметра 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);
0 голосов
/ 10 декабря 2011

Вот моя вспомогательная функция вывода ...

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;
    }
}
...