2016-06-23 57 views
2

我使用array_walk_recursive將htmlspecialchars應用於我的數組值,但它不起作用,htmlspecialchars在我手動使用它時起作用; 這裏是我的代碼:當我使用函數htmlspecialchars時,array_walk_recursive無法工作?

$new[] = "<a href='test'>Test</a><li><div>"; 
var_dump(array_walk_recursive($new,'htmlspecialchars')); // true 
var_dump($new) ; // no change 
+1

也許有用http://stackoverflow.com/questions/2002710/php-how-to-perform-htmlspecialchar-on-an-array-of-arrays – Terminus

+0

@Terminus我已經解決了它,THX! – Yuga

回答

1

array_walk_recursive定義:

array_walk_recursive - 遞歸地應用用戶函數對數組中的每一個 成員

所以,你需要創建一個使用的htmlspecialchars這樣一個用戶定義的函數:

$new[] = "<a href='test'>Test</a><li><div>"; 
array_walk_recursive($new, "specialChars"); 
var_dump($new); 

function specialChars(&$value) { 
    $value = htmlspecialchars($value); 
} 

這將打印:

array (size=1) 
    0 => string '&lt;a href='test'&gt;Test&lt;/a&gt;&lt;li&gt;&lt;div&gt;' (length=56) 
1

這是因爲原始數組不會被修改,除非你自己修改它的回調函數。

回調函數基本上是:

function($item, $key) { 
    htmlspecialchars($item); 
} 

所以當函數被調用,沒有任何東西存儲和原始數組不會改變。

如果你想修改函數的值,你可以通過引用傳遞它:

function(&$item, $key) { 
    $item = htmlspecialchars($item); 
} 

那麼結果會是這樣的:

$new[] = "<a href='test'>Test</a><li><div>"; 
array_walk_recursive($new, function(&$item, $key) { 
     $item = htmlspecialchars($item); 
}); 
var_dump($new) ; // change! 

當然,你可以定義一個單獨的功能,如果你願意。

相關問題