Creación de BBcode en PHP

Para comenzar con la categoría PHP voy a enseñaros como podéis crear una sencilla función para poder poner BBcode que incluya la opción de poner texto en negrita, en cursiva, subrayado, links e imágenes.
Veremos cómo realizar esto paso a paso. Lo primero es crear la función PHP sin incluir sus instrucciones.

<?
function BBcode($texto){
// aquí ira el contenido de la función
return $texto;
}
?>


Para realizar esto vamos a utilizar un función muy básica en PHP, preg_replace().

De tal forma que si queremos que cuando en $texto aparezcan los tags [b] y [/b] se conviertan en el HTML &lt;b&gt; y &lt;/b&gt; podríamos hacerlo de la siguiente manera:

<?
preg_replace("/\[b\](.*?)\[\/b\]/is","<b>$1</b>",$texto);
?>


Y así podríamos realizarlo con todos los tags sencillos que deseemos pero como siempre hay una mejor opción y es utilizar un array para las expresiones regulares(patrón) y otro para el texto de reemplazo:

<?
function BBcode($texto){
   $a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is"
   );

   $b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>"
   );
   $texto = preg_replace($a, $b, $texto);
   return $texto;
}
?>


Bien ya tenemos una sencilla función para poder poner texto en cursiva, negrita y tachado.

Pero lo propuesto es también poder poner imágenes y enlaces, para las imágenes es muy similar a lo anterior, pero para los enlaces es un poco mas complicado, la función quedaría de la siguiente manera:

<?
function BBcode($texto){
   $a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is",
      "/\[img\](.*?)\[\/img\]/is",
      "/\[url=(.*?)\](.*?)\[\/url\]/is"
   );

   $b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>",
      "<img src=\"$1\" />",
      "<a href=\"$1\" target=\"_blank\">$2</a>"
   );
   $texto = preg_replace($a, $b, $texto);
   return $texto;
}
?>

Ahora bien podemos añadir a la función alguna función extra como puede ser que el texto enviado en html no sea permitido y que este se muestre, esto lo arreglamos con la htmlentities() y también podemos agregar que los saltos de línea sean convertidos automáticamente en &lt;br /&gt; con nl2br(), nuestra función BBcode() final quedará de la siguiente forma:

<?
function BBcode($texto){
   $texto = htmlentities($texto);
   $a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is",
      "/\[img\](.*?)\[\/img\]/is",
      "/\[url=(.*?)\](.*?)\[\/url\]/is"
   );
   $b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>",
      "<img src=\"$1\" />",

       "<a href=\"$1\" target=\"_blank\">$2</a>"
   );
   $texto = preg_replace($a, $b, $texto);
      $texto = nl2br($texto);
   return $texto;
}
?>

Autor

Mario Juárez

Estudiante

Compartir

Comentarios

Cristian Lagos

19/4/2006
Faltaría el manual para los textareas con formato, es decir, un verdadero word en la web, hace poco realicé uno donde podías subir imágenes y estas eran insertadas en el texto que el usuario estaba ingresando, tambien la opción de poner negritas y verlas online.

Alvarez Lucas

21/4/2006
Estoy tratando de dar los primeros pasos en php y seria posible que dieran un ejemplo practico de como funciona, como llamar a la funcion ,, etc?

Gracias.

Daniel

21/4/2006
a mi me interesaria lo que dice cristian... hacer un formulario tipo word en la web... es posible? como? yo tengo un administrador de contenidos pero uso wysiwyg editores externos... me encantaria poder hacer uno propio... saludos y muy interesante el articulo!!

Juan Carlos

29/4/2006
Hola mi comentario es saber como funciona esto entienden lo e estado probando y no remplaza nada me gustaria saber eso ok gracias

Antonio

17/4/2007
Se puede refinar más. Por ejemplo analizar el texto en busca de BBcode anidados y simplificarlos, o detectar etiqueta BBcode mal escritas (con espacio en su interior) y corregirlas automáticamente.

Cristhian Kasco

21/5/2010
Excelente articulo!!!
Era [b]justo lo que andaba buscando[/b] pero me parece que la idea de mi tocallo es muy buena inclusive he utilizado algunos editores como el TyniMc pero al momento de guardar la informacion del textarea tengo que presionar 2 veces el boton y no lo he podido solucionar =(....

El Observador

03/5/2017
Existe una biblioteca llamada BBCode en PHP
Hola a todos y todas, estaba leyendo esto porque encontré que hay una biblioteca nativa de PHP llamada justo así BBCode, aún indago en como usarlo, pero les comparto un link:
http://php.net/manual/es/book.bbcode.php