geek space web solutions

Problèmes de codage utf-8 avec Shadowbox et Modalizer

Lundi, 10 Mai 2010 00:00
javascript codage utf8 error
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)

javascript codage utf8 erreur html
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 )
{
return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
return decodeURIComponent( escape( 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 );

htmlentities
Convertit tous les caractères éligibles en entités HTML
Ex: convertit <strong> en &lt;strong&gt;

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 :

Avec htmlentities modifié
Dans JCE: javascript codage utf8 balises jce joomla
HTML: javascript codage utf8 html htmlentities
Shadowbox: javascript codage utf8 shadowbox htmlentities
En retirant htmlentities
Dans JCE: javascript codage utf8 balises jce joomla
HTML: javascript codage utf8 html sans htmlentities
Shadowbox: javascript codage utf8 shadowbox sans htmlentities

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.
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Sections

Éditeur de fichier XML en ligne


"XML Manager" est un éditeur sécurisé permettant d'administrer en ligne un fichier XML.
Il fournit des fonctions avancées de recadrage et de redimensionnement des images...

Sondages

Pensez-vous que le HTML5 puisse complètement remplacer Flash ?
 
Seriez-vous intéressé par un éditeur d'XML en ligne ?
 

Paypal

paypal

Code du plugin Joomla AutoSEO 1.2 par www.geek-space.fr