2016-06-23 13 views
2

Ich benutze array_walk_recursive, um htmlspecialchars auf meinen Array-Wert anzuwenden, aber es hat nicht funktioniert, htmlspecialchars funktioniert, wenn ich es benutze manully; Hier ist mein Code:array_walk_recursive kann nicht funktionieren, wenn ich die Funktion htmlspecialchars verwende?

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

Vielleicht nützlich http://stackoverflow.com/questions/2002710/php-how-to-perform-htmlspecialchar-on-an-array-of-arrays – Terminus

+0

@Terminus ich es gelöst haben, thx !!! – Yuga

Antwort

1

In der Definition von array_walk_recursive:

array_walk_recursive - zu

Sie müssen also jedes Element eines Arrays rekursiv eine Benutzerfunktion Tragen Sie eine benutzerdefinierte Funktion, die htmlspecialchars erstellen, wie diese verwendet :

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

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

Und dieser Druck wird:

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

Das liegt daran, dass das ursprüngliche Array nicht geändert wird, wenn Sie es sich in der Callback-Funktion ändern.

Ihre Callback-Funktion ist im Grunde:

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

Während also die Funktion aufgerufen wird, wird nichts gespeichert und das Original-Array wird nicht verändert.

Wenn Sie den Wert in der Funktion ändern möchten, können Sie es durch einen Verweis:

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

So wäre das Ergebnis wie folgt aussehen:

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

Sie können natürlich auch eine separate definieren Funktion, wenn Sie das bevorzugen würden.