Zumbe.net

Comenzando a programar una web

Crear un bbcode

Muchas veces querríamos aplicar a nuestras bases de datos un código similar al html pero más simplificado. El ejemplo perfecto es el BBCode que se usa en la mayoría de foros (PhpBB). Hacerlo resulta más fácil de lo que parece.

Para introducir brevemente diré que una función de “bbcode” lo que hace es traducir un código inventado y simplificado al código HTML.

Por ejemplo para poner un enlace en html tendríamos que escribir:

http://miurl.com/directorio> http://miurl.com/directorio

y con bbcode se resume en esto:

[url]http://miurl.com/directorio[/url]

BBCode:

Es una colección de marcadores de formato que se usan para cambiar la apariencia del texto en un foro. BBCode está basado en el mismo principio que, y es muy similar a, HTML.

[ Wikipedia ]

El objetivo de este tutorial es que, a través de una función de PHP, transformemos un texto con etiquetas de BBCode a sus etiquetas de HTML listas para interpretar en un navegador.

Creando el archivo

La base de nuestro bbcode será un array y la función preg_replace(). En muchos tutoriales que nos encontramos de cómo hacer BBCode nos dicen que usemos la función str_replace, pero con esta función sólo podemos crear ciertos signos muy básicos, como negrita o Itálica, ya que la función es muy simple, pero cuando necesitamos códigos de tipo [algo=valor]palabra[/algo] la función se nos queda corta.

Ejemplo de bbcode con la función str_replace, que resulta limitada.



function bbcode($texto) {

$bbcode = array(

// letra negrita

‘[b]’ => ,

‘[/b]’ => ,

// letra cursiva

‘[i]’ => ,

‘[/i]’ => ,

// letra subrayada

‘[u]’ => ,

‘[/u]’ =>

);

$search = array_keys($bb_code);

$texto = str_replace($search, $bb_code, $texto);

return $texto;

}

?>

Y es aquí cuando recurrimos la la función preg_replace

Expresiones regulares:

Son una serie de carácteres que forman un patrón, normalmente representativo de otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otro conjunto de carácteres para ver las coincidencias.

[ Ignside ]

Para esta función usaremos un array con nuestros BBCode’s usando expresiones regulares y otro con el remplazo que se ha de hacer al html.

La función preg_replace almacena en variables del tipo $n (donde n es un número del 0 al 99: $1, $2, $45…) los valores que se encuentren entre paréntesis en el patrón.

Un ejemplo práctico:



$texto
= ‘Me gusta el [b]pescado[/b] mucho’;

$reemplazo = preg_replace(‘/\\[b\\](.*?)\\[\\/b\\]/is’, $1,$texto);

echo $reemplazo;

//devolverá “Me gusta el pescado mucho”

?>

Lo que hemos hecho es decir que reemplace cualquier coincidencia de tipo

[b](cualquier texto)[/b]

por

(ese mismo texto)

mediante la variable $1 que almacena lo que contiene el paréntesis en la expresión regular.

Y ahora ya podemos pasar a crear nuestro script:



function bbcode($texto) {

//Anulamos el html y aplicamos saltos de línea.

$texto = nl2br(htmlentities($texto));

$codigo = array(

‘/\\[b\\](.*?)\\[\\/b\\]/is’,

‘/\\[i\\](.*?)\\[\/i\\]/is’,

‘/\\[u\\](.*?)\\[\/u\\]/is’,

‘/\\[url\\=(.*?)\\](.*?)\\[\\/url\\]/is’,

‘/\\[url\\](.*?)\\[\\/url\\]/is’,

‘/\\[align\\=(left|center|right)\\](.*?)\\[\\/align\\]/is’,

‘/\\[img\\](.*?)\\[\\/img\\]/is’,

‘/\\[mail\\=(.*?)\\](.*?)\\[\\/mail\\]/is’,

‘/\\[mail\\](.*?)\\[\\/mail\\]/is’,

‘/\\[font\\=(.*?)\\](.*?)\\[\\/font\\]/is’,

‘/\\[size\\=(.*?)\\](.*?)\\[\\/size\\]/is’,

‘/\\[color\\=(.*?)\\](.*?)\\[\\/color\\]/is’

);

$reemplazo = array(

$1,

$1,

$1,

$2,

$1,


$2

,

$1,

$2,

$1,

$2,

$2,

$2

);

// Reemplazar

$texto = preg_replace ($codigo, $reemplazo, $texto);

return $texto;

}

?>

Imagino que queda claro el código, ahora es cosa de aplicarlo a nuestros textos llamando a la función de esta forma:



$mitexto
= ‘Visita mi [url=http://zumbe.net]página web[/url]’;

$nuevotexto = bbcode($mitexto);

echo $nuevotexto;

//Devolverá: Visita mi página web

?>

Mira el resultado

Y ya está! así de simple y sencillo. Ahora podéis inventaros nuevas etiquetas, como yo que uso la etiqueta [blank] para hacer enlaces en una nueva ventana.

El patrón sería

‘/[blank=(.*?)](.*?)[/blank]/is’

Y lo reemplazaría por

“$1″ target=“_blank”>$2

Mucha suerte en vuestros scripts!

Referencia: http://www.phpit.net/code/bbcode-format-function/

28 Enero 2006 · Tags Sin categoría |

No hay comentarios, escribe el primero!

Escribe un comentario!

Buscador

2005-2007 Zumbe.net Creada por Alex Barros con WordPress - Licencia Reconocimiento - RSS