Tutte le funzioni ereg(i) sono ormai deprecate. Usa le PCRE
Codice PHP:
preg_match_all('/\[decode\](.+?)\[\/decode\]/', $stringa, $m);
$search = $m[0]; // contiene l'array di tutti i match [decode][/decode]
$text = $m[1]; // contiene l'array di tutti i testi all'interno di [decode]
$l = count($search);
for($i = 0; $i < $l; $i++) {
$stringa = str_replace($search[$i], html_entity_decode($text[$i]), $stringa);
}
echo $stringa;
Ma se vuoi una soluzione più semplice, basta usare preg_replace:
Codice PHP:
$decode = preg_replace('/\[decode\](.+?)\[\/decode\]/e', 'html_entity_decode("\\1")', $stringa);
echo $decode;