Problema de escape con el plugin WP-GeSHi-Highlight

octubre 25, 2009
1 Star2 Stars3 Stars4 Stars5 Stars (Sin votos)
Cargando…

Cuando comencé este blog pasé algún tiempo buscando un plugin resaltador de sintaxis (syntax highlighter) para los fragmentos de código que se presentan en los artículos. Tras probar algunos de los plug-ins, ninguno me convencía hasta que encontré WP-GeSHi-Highlight. Anteriormente había tenido alguna experiencia positiva con la biblioteca GeSHi bajo Joomla (Generic Syntax Highlighter), y me gustó la demo así que pensé que esto era lo que necesitaba.

Tras instalarlo, me di cuenta de un comportamiento muy molesto del plug-in. El código de muestra contenía el carácter especial >, pero en el código apareciá como >. Pensé que será fácil de encontrar la fuente del problema, pero después de indagar un poco sobre el tema, observé que GeSHi convierte los caracteres HTML especiales a entidades HTML mediante su propia función HCS(). No había manera de decir a GeSHi que no realice esta conversión, así que tuve que modificar un poco el código del plug-in:

//$geshi = new GeSHi($code, $language);
$geshi = new GeSHi(htmlspecialchars_decode($code), $language);

Como el servidor donde está alojado este blog corre con PHP superior a la 5.1 no tuve que crear mi propia función html, pero en caso de que vuestra versión sea inferior a 5.1, tendréis que añadir también esta función:

if (!function_exists("htmlspecialchars_decode")) {
    function htmlspecialchars_decode($string, $quote_style = ENT_COMPAT) {
        return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
    }
}

Con esto solucioné mi problema, seguramente con la próxima actualización tendré que volver a cambiar el código. Espero que sea de vuestra ayuda.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *