En esta ocasión, una función para convertir una cadena en formato BBCode (Bulletin Board Code), típico de los foros, y convertirlos a html para mostrarlos.
Este parser nos permite almacenar los textos con código diferente al HTML y así evitar que alguien guarde contenido en javascript o sentencias HTML que puedan perjudicar.
function BBCodeAHTML( $cadena ) {
// Eliminamos etiquetas HTML que pueda contener la cadena
$cadena = strip_tags( $cadena );
// Ahora con la cadena limpia de etiquetas HTML definimos las etiquetas BBCode que queremos tener
$etiquetas = array(
'N' => array( 'type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<strong>', 'close_tag'=>'</strong>' ), // Negrita
'C' => array( 'type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<i>', 'close_tag'=>'</i>' ), // Negrita
'S' => array( 'type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<span style="text-decoration:underline">', 'close_tag'=>'</span>' ), // Subrayado
'D' => array( 'type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<span style="text-align:right">', 'close_tag'=>'</span>' ), // Alinieación Derecha
'I' => array( 'type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<span style="text-align:left"', 'close_tag'=>'</span>' ), // Izquierda
'M' => array( 'type'=>BBCODE_TYPE_NOARG, 'open_tag'=>'<span style="text-align:rcenter"', 'close_tag'=>'</span>' ), // Centrada
);
// Eltras etiquetas son: [N] Para negrita, [C] Para cursiva, [S] Para subrayado, [D], [I], [M] Para las alineaciones, derecha, izquierda o medio
// Procesamos los cambios
$parser = bbcode_create( $etiquetas );
$cadena = bbcode_parse( $parser, $cadena );
// Eliminamos el resto de las etiquetas que pudiera haber
$cadena = preg_replace( '[\[(.+)\]]', '', $cadena );
// Devolvemos la cadena limpia y traducida al HTML
return( $cadena );
}
