Si tenemos en nuestra página alguna sección donde los visitantes pueden escribir sus comentarios sobre nuestra página o cualquier cosa que utilice un formulario, puede que queramos dejar que el visitante le de formato al texto (negrita, cursiva, darle color, etc.) pero no deseamos dejar que el usuario utilice HTML ya que puede ser un riesgo de seguridad y nuestra página quedaría vulnerable a ataques por personas maliciosas.

Para esto hace tiempo se creo un código comúnmente conocido como BBCode y que permite darle formato a nuestro texto sin los riesgos de utilizar directamente HTML.

Como en el ejemplo anterior volveremos a usar preg_replace() aunque para otros ejemplos con el uso de str_replace() tendremos más que suficiente. Mostraré varios ejemplos que puedes ir uniendo según lo que quieras.

Texto en negrita

Para poner un texto en negrita podemos hacer uso de str_replace():

<?
$texto = ‘Quiero este texto en negrita.’ ;
$texto = str_replace(array(‘‘,’‘),array(‘‘,’‘),$texto) ;
echo $texto ;

El ejemplo anterior nos daría como resultado esto:

Quiero este texto en negrita.

También podemos usar preg_replace():

Nota: Los mismo creadores de PHP recomiendan str_replace() por encima de preg_replace() en cuestión de rendimiento, ya que el primero hace una sustitución simple y directa, y el segundo usa el motor de expresiones regulares lo cuál ocasiona una carga ligeramente mayor, así que en la medida de lo posible es recomendable primero buscar una solución mediante str_replace() y posteriormente con preg_replace().

Texto a color

Para un texto a color podemos hacer una combinación de preg_replace() con str_replace():

<?
$texto = ‘Quiero este texto en color naranja.’ ;
$texto = preg_replace(‘/\[color=(#?[a-z0-9]+)\]/i’,'<span>’,$texto) ;
$texto = str_replace(‘[/color]’,'</span>’,$texto) ;
echo $texto ;

Este es el resultado:

Quiero este texto en color naranja.

Podemos usar sólo preg_replace() aunque debemos hacer uso del modificador “U” si indicamos dos o más colores diferentes:

</span>

El resultado sería este:

Quiero este texto en color naranja y este en color verde.

Si no usas “U” en la expresión, la función no se detendría en el primer [ /color] y se iría hasta el último encontrado en el texto, dando como resultado esto:

Quiero este texto en color naranja [ /color] y [ color=#00c000]este en color verde.