> Manuales > Taller de 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;
}
?>

Mario Juárez

Estudiante

Manual