Ошибка PHP htmlspecialchars

почему это

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

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

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

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

спасибо

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

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

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

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

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

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

имя_функции
Как правило, 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 ); 

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

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

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

так что если

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

тогда

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

звонки

 htmlspecialchars('value', 'key') 

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

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

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

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