Comenzando a programar una web
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.
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
‘,
‘‘,
‘$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
?>
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
Mucha suerte en vuestros scripts!
Referencia: http://www.phpit.net/code/bbcode-format-function/
28 Enero 2006 · Tags Sin categorÃa |