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 <b> 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 <br /> 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;
}
?>
<?
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 <b> 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 <br /> 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