Plugin Wordpress WP-Syntax, problème htmlspecialchars
// août 10th, 2010 // Informatique
Certains articles de mon blog souffrent depuis le début d’un problème sur les syntaxes de codes. Les caractères spéciaux sont remplacés par leur équivalent htmlentities. D’ailleurs, on n’a pas omis de me le faire remarquer dans les commentaires.
Faute de temps, je n’ai pu me pencher sur le problème qu’un an après la publication, je promets d’être plus actif sur ce blog à partir de maintenant. Pour vous prouver encore ma bonne foi, je vous apporte la correction au problème anodin (si anodin que je n’en ai aucun mérite, en fait …).
WP-Syntax est un plugin Wordpress qui permet d’afficher du code source de manière super lisible, c’est à dire correctement colorés comme sur les éditeurs, grâce à GeSHi, une librairie qui formate le style des codes et qui supporte, aujourd’hui, une centaine de langages. Super projet, soit-dit en passant!
Si vous avez un blog Wordpress et vous utilisez WP-Syntax (j’ai la version 0.9.6 qui intègre GeSHi 1.0.8.4 ), vous aurez probablement affaire a des caractères spéciaux qui s’affichent mal sur la sortie de votre article. Dans ce genre :
if(this["container"]._width > 1){
Et qui s’affiche :
if(this["container"]._width &lgt; 1){
Je suis d’abord allé voir comment WP-Syntax fonctionne, a voir dans le fichier wp-content/plugins/wp-syntax/wp-syntax.php, plus précisément dans la fonction wp_syntax_highlight :
if ($escaped == "true") $code = htmlspecialchars_decode($code); $geshi = new GeSHi($code, $language);
Il suffit donc d’ajouter l’attribut escaped et de le définir à “true” pour corriger le problème. D’ailleurs, ça marche aussi en lisant de README.txt :
**Example 4: If your code already has html entities escaped, use `escaped="true"` as an option**Mais étant donné que le WYSIWYG, dans l’admin de Wordpress se charge lui même de convertir (certains) caractères spéciaux en htmlentities (si vous éditez votre post en mode visuel). C’est une option dont vous aurez toujours besoin. De plus, ça vous évite d’avoir a modifier tous vos articles (dans mon cas, j’en ai pas tant que ça, je sais, je suis fainéant).
if ($escaped == "true") $code = htmlspecialchars_decode($code); $geshi = new GeSHi($code, $language);
En :
$code = htmlspecialchars_decode($code); $geshi = new GeSHi($code, $language);
L’option est bon à connaitre mais a mon avis, c’est plus simple de le mettre par défaut. De plus, quand vous ajoutez cette option sur le mode HTML, le WYSIWYG l’enlève si vous basculez sur le mode Visuel …






