Posts Tagged ‘PHP’

Plugin Wordpress WP-Syntax, problème htmlspecialchars

// août 10th, 2010 // No Comments » // 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 …

PHP Artichow Missing imageantialias

// avril 15th, 2010 // 6 Comments » // Informatique

Artichow Erreur Antialias

Vectoris a pu experimenter Artichow, qui je le rapelles est une librairie de génération de graphes avec php_gd. Il s’est avéré qu’il y avait plusieurs autres solutions, en Flash, en JQuery … voir Artichow pour des graphes statistiques en PHP.

Ce qui est sympa avec Artichow, c’est que les erreurs sont bien et “joliment” présentés. Voici, plus haut, une de celles que vous pourrez rencontrer en l’utilisant. “Missing imageantialias() function. Check your PHP installation”. Rencontré sur PHP 5.2 avec Artichow 1.0.9.

Le réflexe : faire un phpinfo() pour vérifier si php_gd est bien là. Mais voilà, il y est, le problème est ailleurs. Il se trouve que cette fonction n’est disponible que si PHP est installé avec la version embarquée de la bibliothèque GD. Si vous utilisez une version pré-compilée, dans mon cas, php5-gd, ça ne marchera pas.

A rappeler que l’anti-alias ou anticrénelage, en français, est un procédé qui enlève les pixelisations sur les textes. Plus d’info sur Wikipedia, Anticrénelage.

“Ahh, tête posée, effectivement, c’est évident”. On va désactiver ça, il y a justement une méthode … :

$graph->setAntiAliasing(false);

“Ah, zut, c’est toujours pas OK …”

Votre raisonnement est juste. En fait, c’est celle de la méthode qui est fausse. Allons la voir, dans le fichier inc/drivers/gd.class.php :

if(function_exists('imageantialias')) {
imageantialias($this->resource, (bool)$bool);
$this->antiAliasing = (bool)$bool;
} else {
awImage::drawErrorFile('missing-anti-aliasing');
}

Même si on désactive l’anti-alias, tant que la fonction n’existe pas, on a toujours l’erreur. Mais si on est en train de la désactiver, c’est justement qu’on a pas besoin, non ? Pour résoudre, faites un elseif, a la place du else, en testant la valeur de paramètre reçu par la méthode :

} elseif($bool==true) {

Ce code est plus juste, non ? D’ailleurs, vous venez de résoudre votre problème. J’espère que les développeurs Artichow corrigeront ça pour les prochaines versions …

Sinon, si vous y tenez à ce Anti-alias, il faudra recompiler PHP avec GD que vous trouverez surement à coup de Google. Ou bien … je ne sais pas si il y a moyen de remplacer le fichier gd.so sauvagement dans /usr/lib/php5/ …