Vous pouvez obtenir la liste des correspondances de caractères => entité utilisée par htmlentities
, avec la fonction get_html_translation_table
; envisager ce code :
$list = get_html_translation_table(HTML_ENTITIES);
var_dump($list);
(Vous voudrez peut-être consulter le deuxième paramètre à cette fonction dans le manuel, peut-être que vous aurez besoin de le mettre à une valeur différente de celle par défaut)
Il sera vous obtenez quelque chose comme ceci :
array
' ' => string ' ' (length=6)
'¡' => string '¡' (length=7)
'¢' => string '¢' (length=6)
'£' => string '£' (length=7)
'¤' => string '¤' (length=8)
....
....
....
'ÿ' => string 'ÿ' (length=6)
'"' => string '"' (length=6)
'<' => string '<' (length=4)
'>' => string '>' (length=4)
'&' => string '&' (length=5)
Maintenant, retirez les correspondances que vous ne voulez pas :
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
Votre liste, maintenant, de toutes les correspondances de caractères => entité utilisée par htmlentites, sauf quelques-uns des personnages que vous ne voulez pas de l'encodage.
Et maintenant, vous avez juste à extraire la liste des clés et valeurs :
$search = array_keys($list);
$values = array_values($list);
Et, enfin, vous pouvez utiliser str_replace pour faire le remplacement :
$str_in = '<p><font style="color:#FF0000">Camión español</font></p>';
$str_out = str_replace($search, $values, $str_in);
var_dump($str_out);
Et vous obtenez :
string '<p><font style="color:#FF0000">Camión español</font></p>' (length=84)
Qui ressemble à ce que tu voulais ;-)
Edit : bien, sauf pour le problème d'encodage (putain UTF-8, je suppose-j'essaie de trouver une solution pour que, et de modifier à nouveau)
Edit deuxième couple de minutes après : il semble que vous devez utiliser utf8_encode
sur le $search
liste avant d'appeler str_replace
:-(
Ce qui signifie en utilisant quelque chose comme ceci :
$search = array_map('utf8_encode', $search);
Entre l'appel à l' array_keys
, et l'appel d' str_replace
.
Et, cette fois, vous devriez vraiment obtenir ce que tu voulais :
string '<p><font style="color:#FF0000">Camión español</font></p>' (length=70)
Et ici, c'est la pleine partie de code :
$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
$search = array_keys($list);
$values = array_values($list);
$search = array_map('utf8_encode', $search);
$str_in = '<p><font style="color:#FF0000">Camión español</font></p>';
$str_out = str_replace($search, $values, $str_in);
var_dump($str_in, $str_out);
Et la sortie complète :
string '<p><font style="color:#FF0000">Camión español</font></p>' (length=58)
string '<p><font style="color:#FF0000">Camión español</font></p>' (length=70)
Cette fois, il devrait être ok ^^
Il ne rentre pas vraiment dans une ligne, est peut-être pas le plus optimisé solution, mais il devrait fonctionner très bien, et a l'avantage de vous permettre d'ajouter/supprimer toute correspondance personnage => entité dont vous avez besoin ou pas.
Amusez-vous !