Gestion du signe euro dans utf8_encode
Pire encore, sur sa page web !
Que veut-il exprimer ? Il s’agit d’un caractère non-reconnu par l’encoding utf8.
Certains petits malins utiliseront utf8_encode, mais l’euro ne passera pas…
Ce problème est typiquement trouvé dans les pages codées en UTF8 qui rassemblent du contenu issu de plusieurs sources encodée pour certaines en UTF8 et pour certaines en ISO-8859-1. Ici par exemple, les titres d’images arrivent en ISO-8859-1. Il y a hétérogénéité des codages.
Comment corriger ce problème ?
La réponse courte
La réponse courte est d’utiliser la fonction utf8_encode() pour coder en utf8 au sein de votre page web les textes susceptibles de contenir des caractères non-standards. Ainsi le navigateur qui reçoit ce texte, et pour peu que votre page web lui impose un charset=UTF-8, rendra ces caractères proprement.Si votre langage de script est le PHP, je vous conseille même d’utiliser un alias que vous pourrez définir vous-même dans votre bibliothèque de fonctions : la fonction de mon cru utf8_encode2(), de code défini ci-après. Elle a l’immense avantage de coder certains caractères ignorés par utf8_encode(), car faisant partie d’autres jeux de caractères. En l’occurence cp1252, qui inclut l’euro.
<?php
function utf8_encode2($str) {
$final_str = $str;
$final_str = str_replace('œ', 'œ', $final_str);
$final_str = str_replace('’', 'ߣ', $final_str);
$final_str = str_replace('“', 'ÉC;', $final_str);
$final_str = str_replace('”', 'ÉD;', $final_str);
$final_str = str_replace('…', 'ߪ', $final_str);
$final_str = str_replace('€', '€', $final_str);
$final_str = utf8_encode($final_str);
$final_str = str_replace(utf8_encode('œ') , 'Å“', $final_str);
$final_str = str_replace(utf8_encode('ߣ'), '’', $final_str);
$final_str = str_replace(utf8_encode('ÉC;'), '“', $final_str);
$final_str = str_replace(utf8_encode('ߪ'), '…', $final_str);
$final_str = str_replace(utf8_encode('ÉD;'), 'â€', $final_str);
$final_str = str_replace(utf8_encode('€'), '€', $final_str);
return $final_str;
}
?>
La réponse longue
Et avec laquelle vous n’aurez même pas besoin d’utiliser utf8_encode() pour transmettre votre texte dans le flux HTML, ni autres htmlentities() etc… Il s’agit de suivre la best practice d’enregistrer vos pages web en format utf8. Il faudra vous assurer que votre header HTML de la page à afficher indique le charset utf8, comme vu sur l’image 2 plus haut.De cette manière vous pourrez vous permettre toutes les fantaisies, euro, caractères les plus tordus, et tout collera, même sur les navigateurs made in China.
Alors si utf8 résoud tout, pourquoi utiliser les fonctions de conversion ?
Première bonne raison de les utiliser c’est justement pour convertir des données en UTF8 dans le cadre d’une migration.Deuxième raison, c’est pour résoudre des cas de sources mixtes, alors que le développeur n’aurait pas l’entier contrôle du code ou du codage des données. Il doit jongler avec ce qu’il a. D’où l’intérêt qu’il ait à sa disposition une bibliothèque de fonctions de conversion.