Ошибка PHP htmlspecialchars - PullRequest
       29

Ошибка PHP htmlspecialchars

3 голосов
/ 23 августа 2009

с чего бы это

$trader_details = array_walk($trader_details, 'htmlspecialchars');

выдать эту ошибку?

Severity: Warning
Message: htmlspecialchars() expects parameter 2 to be long, string given

afaik htmlspecialchars имеет только дополнительные параметры, кроме входной строки? это работает в codeigniter

ТНХ

Ответы [ 7 ]

2 голосов
/ 23 августа 2009

array_walk передает 2 аргумента по умолчанию. Первый - это значение элемента массива, второй - ключ элемента массива. Он пытается передать ключ массива в качестве второго аргумента htmlspecialchars, который ожидает, что вторым аргументом будет целое число, определяющее используемый стиль цитирования.

2 голосов
/ 23 августа 2009

Функция обратного вызова, переданная в array_walk, ожидает, что второй параметр будет ключом элемента массива:

Обычно funcname принимает два параметра. Значение параметра array является первым, а ключ / индекс вторым.

Но htmlspecialchars ожидает, что вторым параметром будет стиль цитирования (обычно он задается одной из ENT_* констант типа integer).

Попробуйте вместо этого array_map. Он просто использует значения массива.

1 голос
/ 23 августа 2009

http://uk.php.net/array_walk говорит:

funcname
Как правило, funcname принимает два параметра. Значение параметра массива - первое, а ключ / индекс второй .

Вы, вероятно, ищете aray_map . Также обратите внимание, что htmlspecialchars () использует iso-8859-1 в качестве кодировки по умолчанию. Если ваш вывод, например, Кодированный utf-8, вы должны передать эту информацию в качестве третьего параметра htmlspecialchars. В противном случае результат может быть неправильным.
php 5.3:

$foo = array_map(
  function($x) { return htmlspecialchars($x, ENT_QUOTES, 'utf-8'); },
  $trader_details
);
0 голосов
/ 23 августа 2009

Я не думаю, что он будет делать то, что вы хотите, даже если бы он работал.

Функция htmlspecialchars () не изменяет строку, она просто возвращает новую строку с изменениями. Прогулка по массиву не окажет никакого влияния.

0 голосов
/ 23 августа 2009

array_walk передает 2 аргумента вашему методу (htmlspecialchars), первый - значение текущего элемента массива, второй - ключ текущего элемента.

так, если

$trader_details = array('key' => 'value');

затем

$trader_details = array_walk($trader_details, 'htmlspecialchars');

называет

htmlspecialchars('value', 'key')

И это неверно, htmlspecialchars требует, чтобы второй параметр был целым числом - int $ quote_style

0 голосов
/ 23 августа 2009

Я предполагаю, что $ trader_details - это массив строк? htmlspecialchars * Второй параметр () является целочисленным типом для конкретного используемого стиля кавычек.

Возможно, вы захотите использовать array_map . Если $ trader_details - это двумерный массив, пожалуйста, опубликуйте его, чтобы мы могли видеть, что вы пытаетесь сделать.

0 голосов
/ 23 августа 2009

Ошибка очевидна ... Второй аргумент array_walk - это обратный вызов функции, и функция должна иметь 2 параметра. первый для значения и второй для ключа ..

...