Fonction bbcode, compatible w3c

Contenu du snippet

Après de très nombreuses recherches sur le et je n'ai jamais réussi a trouver une fonction qui interprète le bbcode de façon correcte. j'en ai donc récupérée plusieurs, puis je les ai mixés et enfin j'ai retouché la fonction ainsi obtenue pour arriver à cette fonction.En plus d'interpréter le bbcode, elle génère du code xhtml conforme au w3c.
on doit encore pouvoir l'améliorer, c'est pourquoi je vous invite a me faire parvenir vos idées d'amélioration et tout autre commentaires.

réécriture de la fonction le 12/4/2011

Source / Exemple :

<?php
//fonction d'interprétation bbcode, dernière modif 12/04/2011


function BBtags($t) {

$entree = array(
        '#[b](.*)[/b]#Usi',
        '#[i](.*)[/i]#Usi',
        '#[u](.*)[/u]#Usi',
        '#[s](.*)[/s]#Usi',
  '#[quote](.*)[/quote]#Usi',
  '#[code](.*)[/code]#Usi',
        '#[img](.*)[/img]#Usi',
        '#[url](.*)[/url]#Usi',
  '#[email](.*)[/email]#Usi',
        '#[url=(.*)](.*)[/url]#Usi',
  '#[email=(.*)](.*)[/email]#Usi',
        '#[left](.*)[/left]#Usi',
        '#[center](.*)[/center]#Usi',
  '#[justify](.*)[/justify]#Usi',
        '#[right](.*)[/right]#Usi',
  '![list](.+)[/list]!Umi',
  '![*](.+)(?=([*]|</ul>))!Umi',  
  '#[color=(.*)](.*)[/color]#Usi',
  '#[size=(.*)](.*)[/size]#Usi',
  '#[br]#Usi',
  '#[hr]#Usi'
  
    );
$sortie = array(    
        '<strong>$1</strong>',
        '<span style="font-style: italic;">$1</span>',
        '<span style="text-decoration:underline;">$1</span>',
        '<span style="text-decoration:line-through;">$1</span>',
  '<cite>$1</cite>',
  '<pre>$1</pre>',
        '<img src="$1" alt="Image" />',
        '<a href="$1">$1</a>',
  '<a href="mailto:$1" >$1</a>',
        '<a href="$1">$2</a>',
  '<a href="mailto:$1" >$2</a>',
        '<div style="text-align:left;">$1</div>',
        '<div style="text-align:center;">$1</div>',
  '<div style="text-align:justify;">$1</div>',
        '<div style="text-align:right;">$1</div>',
  '<ul> $1 </ul>',
  '<li>$1</li>',  
  '<span style="color: $1;">$2</span>',
  '<span style="font-size: $1;">$2</span>',
  '<br />',
  '<hr />'
    );
    $count = count($entree)-1;
    for($i=0;$i<=$count;$i++)
    {
        $t = preg_replace($entree[$i],$sortie[$i],$t);
    }

  //retour
 return $t;
}
?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.