PHP

Convertir BBCode en HTML con PHP

Hoy en día es muy común tener un editor BBCode en un sitio web, ya sea para un foro o no. En tutoriales anteriores aprendimos a insertar un editor BBCode en un sitio web, en este veremos cómo convertir BBCode en HTML con PHP para poder visualizarlo correctamente.

¿Cómo convertir BBCode en HTML con PHP?

Realizar esto no es tan complicado, podemos utilizar la función preg_replace que nos proporciona PHP para remplazar valores dentro de una cadena de caracteres:

function bbcodeToHTML($text)
{
    // BBCode array
    $find = array(
        
        '~\[code\](.*?)\[/code\]~s',
        
        '/(?si)\\[list=\\d+\\](.*?)\\[\\/list\\]/',
        
        '/(?si)\\[list\\](.*?)\\[\\/list\\]/',
        
        '/(?si)\\[\\*\\](.*?)\\[\\/\\*\\]/',
        
        '~\[b\](.*?)\[/b\]~s',
        
        '~\[i\](.*?)\[/i\]~s',
        
        '~\[s\](.*?)\[/s\]~s',
        
        '~\[sup\](.*?)\[/sup\]~s',
        
        '~\[sub\](.*?)\[/sub\]~s',
        
        '~\[u\](.*?)\[/u\]~s',
        
        '~\[quote\](.*?)\[/quote\]~s',
        
        '~\[size=(.*?)\](.*?)\[/size\]~s',
        
        '~\[font=(.*?)\](.*?)\[/font\]~s',
        
        '~\[color=(.*?)\](.*?)\[/color\]~s',
        
        '~\[url=(.*?)\](.*?)\[/url\]~s',
        
        '~\[video\](.*?)\[/video\]~s',
        
        '~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|bmp))\[/img\]~s',
        
        '~\[center\](.*?)\[/center\]~s',
        
        '~\[left\](.*?)\[/left\]~s',
        
        '~\[right\](.*?)\[/right\]~s'
        
    );

    // Etiquetas HTML para remplazar el BBCode
    $replace = array(
        
        '<code>$1</code>',
        
        '<ol>$1</ol>',
        
        '<ul>$1</ul>',
        
        '<li>$1</li>',
        
        '<b>$1</b>',
        
        '<i>$1</i>',
        
        '<s>$1</s>',
        
        '<sup>$1</sup>',
        
        '<sub>$1</sub>',
        
        '<span style="text-decoration:underline;">$1</span>',
        
        '<pre>$1</' . 'pre>',
        
        '<font size="$1em">$2</font>',
        
        '<font face="$1">$2</font>',
        
        '<span style="color:$1;">$2</span>',
        
        '<a href="$1" target="_blank" rel="nofollow">$2</a>',
        
        '<iframe src="http://www.youtube.com/embed/$1" width="640" height="480" frameborder="0"></iframe>',
        
        '<img src="$1" alt="" style="max-width:740px"/>',
        
        '<p style="text-align:center;">$1</p>',
        
        '<p style="text-align:left;">$1</p>',
        
        '<p style="text-align:right;">$1</p>'
        
    );
    
    // Remplazando el BBCode por las etiquetas HTML
    return nl2br(preg_replace($find, $replace, $text));
}


/*Haciendo una prueba de la función*/
echo bbcodeToHTML('[b]Esto es una prueba[/b]');

Es importante ver que cada elemento del array $replace remplazará al elemento del mismo índice del $find sobre el texto pasado por parámetro. Si queremos agregar un nuevo BBCode a nuestra función solamente tenemos que incluir el código en el array $find y su HTML en el $replace (en el mismo índice).

Bueno gente, hemos llegado al final de este breve tutorial y como siempre digo ante cualquier problema no duden en dejar un comentario.

Compartilo en
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestEmail this to someone

AboutJosé Di Meglio

Apasionado de la tecnología y programación. Aportando información gratuita sobre el mundo de la informática.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *