2009-08-22 64 views
3

为什么会这样PHP用htmlspecialchars错误

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

给这个错误?

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

afaik htmlspecialchars只有可选参数,除了输入字符串?在笨

THX

+0

删除了codeigniter标签,因为它看起来没有造成错误。 – 2009-08-22 22:16:56

回答

2

传递给array_walk回调函数此运行期望的第二个参数是数组元素的键:

通常,funcname的呈现两个参数。 数组参数的值是第一个,密钥/索引第二个。

但是htmlspecialchars预计的第二个参数是引用样式(通常由类型整数的ENT_* constants之一指定)。

改为尝试array_map。它只是使用数组的值。

+0

严重性:警告 消息:array_map()[function.array-map]:第一个参数'Array'应为NULL或有效回调 – stef 2009-08-22 21:19:09

+0

@stef:查看手册:array_map需要参数in另一个命令比array_walk(是啊...这是一个不太好的事情与PHP ^^);看到http://php.net/array_walk和http://php.net/array_map:array_map预计首先回调,并排列第二 – 2009-08-22 21:21:35

+0

烨,谢谢你指出了这一点。修复它。 – stef 2009-08-22 21:25:28

2

array_walk默认传递2个参数。第一个是数组项的值,第二个是数组项的键。它试图将数组键作为第二个参数传递给htmlspecialchars,它希望第二个参数是一个定义要使用的引用样式的整数。

-2

错误是显而易见的... array_walk的第二个参数是关于函数回调,函数需要有2个参数。第一个为值和第二关键..

+0

如何使用array_walk向函数发送多个参数并不明显。 OP不是第一个遇到这个问题的人。 – 2011-11-04 12:59:35

1

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

我假设$ trader_details是一个字符串数组? htmlspecialchars()的第二个参数是整数类型,用于使用特定的quotestyle。您可能想要使用array_map。如果$ trader_details是一个二维数组,请发布它,以便我们可以看到您要做的事情。

0

array_walk传递2个参数给你的方法(htmlspecialchars),第一个是当前数组元素的值,第二个是当前元素的

所以,如果

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

然后

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

调用

htmlspecialchars('value', 'key') 

而这是不正确,用htmlspecialchars需要的第二个参数是一个整数 - 一个int $ quote_style

0

我不认为它会做你想做的,即使它工作。

htmlspecialchars()函数不修改字符串,它只是返回一个新的字符串与修改。阵列走路不会有任何影响。