2009-08-22 143 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()函數不修改字符串,它只是返回一個新的字符串與修改。陣列走路不會有任何影響。