Sur plusieurs de mes sites web dont la programmation est personelle (sans utilisation de logiciel blogue ou système de gestion de contenu), les visiteurs peuvent laisser un commentaire sur un article. L’encodage de caractère des pages de ces sites (charset) est généralement du type iso-8859-1 en XHTML, comme suit:
Contrairement à l’encodage UTF-8, il ne permets pas l’utilisation directe de plusieurs caractères qu’on retrouve dans Microsoft Word et le problème est que certains visiteurs vont écrire leurs commentaires dans Word et copier/coller ça dans la boîte texte pour poster, ce qui crée des pages non standards en XHTML 1.0.
Après pas mal de recherche, j’ai finalement réussi à écrire une petite fonction PHP pour convertir les caractères bizarres de Word en caractère ASCII standard, inspiré par un commentaire sur la fonction get_html_translation_table dans la documentation PHP.
Le code est le suivant:
function msword_text_to_ascii($str){
$str = str_replace(array("\x82", "\x84", "\x85", "\x91", "\x92", "\x93", "\x94", "\x95", "\x96", "\x97", "\xBB", "\xAB", "\xB4", "\x60"), array("\"", "\"", "...", "'", "'", "\"", "\"", "*", "-", "--", "\"", "\"", "\'", "\'"), $str);
return $str;
}
Pour ajouter d’autres caractères ASCII étendu ANSI, référez-vous à ANSI character set and equivalent Unicode and HTML characters [en].
Cool, la fonction que je cherchais pour ces fichus admins de jeux qui me collent du texte de word pour publier des news !