BBCode en PHP con PEAR, parte 2

  • Por
En la traducción de códigos BBCode con PEAR tenemos la posibilidad de elegir los grupos de códigos BB que permitimos.
En el anterior artículo estuvimos tratando sobre la implementación de BBCodes en PHP con PEAR. Dejamos patente que, una vez instalado PEAR y el paquete HTML_BBCodeParser, es muy sencillo analizar un texto en busca de BBCodes y traducirlo a sus correspondientes etiquetas HTML. Pero aun nos queda algún detalle que sería bueno comentar.

Configurar los BBCodes soportados con el archivo BBCodeParser.ini

Existe un archivo de configuración que podemos cargar a la hora de instanciar el analizador de codigos BBCode, que sirve, entre otras cosas, para decir qué grupos de BBCode deseamos soportar.

Existen varios filtros para clasificar por grupos los BBCodes. Estos filtros están en las carpetas de instalación del paquete HTML_BBCodeParser, en el directorio Filter. Además, nosotros podríamos incluso crear nuevos filtros para crear nuevos códigos BBCode a traducir.

El caso es que, a través de un fichero de configuración, se puede decir cuáles de estos filtros se desean utilizar y cuáles no. Este fichero es BBCodeParser.ini, que debemos dejarlo en el directorio HTML que cuelga de PEAR, donde está también el archivo BBCodeParser.php.

Ese archivo .ini está en la descarga del paquete BBCodeParser de PEAR. dentro de la carpeta example. En el artículo anterior que publicamos en desarrollo web .com sobre los BBCodes con PEAR ya comentamos dónde descargar el paquete este y la estructura de directorios que deberíamos tener en el servidor.

Si editamos ese archivo .ini veremos que tiene una línea donde se indican los ficheros que queremos soportar.

filters = Basic,Extended,Links,Images,Lists,Email

Con esa línea indicamos los filtros que se desean procesar, es decir, los grupos de BBCode que se tienen que analizar y cambiar por etiquetas HTML. (para saber qué etiquetas hay en cada tipo de BBCode, podemos leer el artículo Qué es BBCode)

Nosotros simplemente indicaremos los filtros deseados, separados por coma.

Al instanciar el analizador de BBCode tenemos que indicarle que debe leer el BBCodeParser.ini, de la siguiente manera:

$opciones = parse_ini_file('PEAR/HTML/BBCodeParser.ini');
$analizador_bbcode = new HTML_BBCodeParser($opciones);


Ahora podríamos generar una variable con un número mayor de BBCodes, ya que los soportamos todos, tal como se indicó en el archivo de configuración.

$texto = "[b]negrita[/b] [i]cursiva[/i] [url]http://www.desarrolloweb.com[/url] [u][b]Texto subrayado y negrita[/u][/b] [code]esto es un codigo fuente[/code]";

Ahora veamos el código completo para analizarlo y mostrarlo en la página:

$texto = "[url]http://www.desarrolloweb.com[/url] [u][b]Texto subrayado y negrita[/u][/b] [code]esto es un codigo fuente[/code]";
include ("PEAR/HTML/BBCodeParser.php");
$opciones = parse_ini_file('PEAR/HTML/BBCodeParser.ini');
$analizador_bbcode = new HTML_BBCodeParser($opciones);
$texto_traducido = $analizador_bbcode->qParse($texto);
echo $texto_traducido;


Consejos para convertir los textos que vienen de formularios

Sólo queremos comentar que, a la hora de recibir datos de formularios, cargados por los usuarios, conviene antes hacer una conversión a caracteres especiales de ciertos caracteres, como mayores y menores que, con la función htmlspecialchars(). Como debemos saber si hemos seguido los manuales de PHP publicados en desarrolloweb.com, htmlspecialchars() eliminará el significado de cualquier etiqueta HTML que haya introducido el usuario, que serán tratadas como texto normal.

$texto_formateado = $parser->qParse(htmlspecialchars($texto));

Luego, a la hora de mostrar los textos formateados con BBCode, sólo quedaría convertir los saltos de línea en etiquetas BR, con la función de PHP nl2br(), como sigue:

echo nl2br($texto_formateado);

Otras implementaciones de BBCode en PHP

Hemos comentado en este artículo y el anterior, la implementación más rápida y más segura para procesar los BBCode. A través de PEAR tenemos la seguridad que el análisis de los BBCodes será correcto y que el código resultante es completo y sin errores como etiquetas no cerradas.

Porque hay que decir que el paquete HTML_BBCodeParser está preparado para devolver sólo código XHTML validado correctamente. Si por ejemplo, al crear un texto con BBCodes, un usuario se olvida de cerrar una etiqueta, el sistema analizador la cerrará automáticamente.

Entendemos, no obstante, que puede ser difícil poner en marcha PEAR y el paquete HTML_BBCodeParser, así que en DesarrolloWeb.com tenemos otras implementaciones de códigos BBCode que se pueden realizar sin necesidad de PEAR: BBcode con PHP y Tutorial BBCode.