Caracteres especiais em html do PHP codificam não às entidades mas às casas decimais

Tenho dificuldade em encontrar uma solução para o seguinte problema:

eu tenho um monte de personagens especiais no site que quando eu executá-los através de htmlentities ();

todos os caracteres especiais são convertidos para entidades HTML:

£ => £
" => "
 => Â
....

mas o que realmente preciso é da versão Decimal dessa codificação:

£ => £
" => "
 of(Â) => À
  =>  

Existe alguma função que já exista que resolva este problema sem fazer isto manualmente com um substituto?

Author: Alex, 2012-03-15

1 answers

Algo como o seguinte?
function htmlnumericentities($str){ 
  return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str); 
} 

function numericentitieshtml($str){ 
  return utf8_encode(preg_replace('/&#(\d+);/e', 'chr(str_replace(";","",str_replace("&#","","$0")))', $str)); 
} 

echo (htmlnumericentities ("Ceci est un test : & é $ à ç <")); 
echo ("<br/>\n"); 
echo (numericentitieshtml (htmlnumericentities ("Ceci est un test : & é $ à ç <"))); 
 3
Author: Andreas Wong, 2012-03-15 09:48:07