Problèmes de codage utf-8 avec Shadowbox et Modalizer |
Monday, 10 May 2010 00:00 | |||||||||||||||||
There are no translations available. ![]() Certains scripts php utilisent parfois des fonctions qui génèrent des problèmes de codage de caractères. Vous avez certainement déjà rencontré des "é", "Ã", "ô", "â", "î", "è", "ê"... En premier lieu vérifiez le codage de votre page. Il est conseillé aujourd'hui d'utiliser le format utf-8.
(Les explications ci-dessous sont valables pour des pages au format utf-8) Dans la balise head de votre page vérifiez la meta suivante pour savoir dans quel codage vous travaillez : <meta http-equiv="content-type" content="text/html; charset=utf-8" /> Shadowbox et Modalizer Pour vous donner un exemple plus concret, prenons l'exemple de shadowbox : lorsque vous afficher des images avec shadowbox, en définissant un texte alternatif dans la balise <img ... > de l'image miniature, ce texte apparaîtra comme le titre un fois la shadowbox ouverte... Si ce texte comporte des caractères accentués, le titre de la shadowbox affichera à la place de ces caractères des "é", "Ã", "ô", "â", "î", "è", "ê"... La raison est que sur la page html générée les caractères accentués ont mal été convertis ! (vois image ci-dessous) ![]() Exemple de caractères mal convertis sur la page html 1ère solution : Modifier le javascript pour qu'il décode le codage utf-8 : Utilisez les fonctions javascripts suivantes : function encode_utf8( s )Ces fonctions semblent compatibles sur la plupart des navigateurs... Dans le cas de shadowbox, pour résoudre le problème de codage du titre, ouvrez le fichier shadowbox.js, faites une recherche pour trouver title_i.innerHTML=obj.title et remplacez cette partie du code par: title_i.innerHTML=decodeURIComponent( escape( obj.title ) ) 2ème solution : Modifier le script php qui restitue mal les caractères accentués : Dans le cas du plugin Modalizer pour Joomla, ouvrez le fichier : plugins -> system -> modalizer -> helper.php Aux environs de la ligne 574, vous trouverez la fonctions qui pose problème : $_title = htmlentities( $_title );Cette fonction prend un troisième argument optionnel charset qui définit le jeu de caractères utilisé durant la conversion. Par défaut, le jeu de caractères ISO-8859-1 est utilisé. Pour résoudre notre problème, vous pouvez préciser le codage de sortie que vous désirez de la manière suivante : $_title = htmlentities( $_title, ENT_QUOTES, 'UTF-8' );Cependant, après quelques textes, je constate qu'il est parfois préférable de retirer complètement la fonction htmlentities, constatez par vous même avec le tableau ci-dessous :
Remarques : Attention les 2 solutions sont incompatibles entre elles. Vous obtiendrez un message d'erreur javascript : "malformed URI sequence" si vous faites les 2 modifications.
|