Pour rechercher et remplacer des esperluettes dans du HTML en PHP les expressions régulières rendent bien service. Pour faire bien les choses, il faut rechercher toutes les esperluettes à l'exception de celles contenues dans les entités HTML. Voici une expression régulière qui fonctionne bien :
'/&(?!(a-z+|#0-9+|#x0-9a-f+);)/i'

À l'aide de cette expression, il est possible de nettoyer le contenu d'un tableau multi-dimensionnel. Voici deux fonctions (utilisable en tant que méthode de classe) rendant ce service :

function postraiterDonnees(&$tableau) {
	if (count($tableau) > 0) {
		foreach ($tableau as $cle => &$valeur) {
			if (is_string($valeur)) {
				$valeur = remplacerEsperluette($valeur);
			} else if (is_array($valeur)) {
				postraiterDonnees($valeur);
			}
		}
	}
}
	
function remplacerEsperluette($txt) {
	$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&', $txt, -1);
	return $txt;
}