Bonjour,
dans ce script, je vais vous apprendre comment parser(convertir) un code BBcode à un code (X)Html, en utilisant le langage de programmation PHP et plus précisément les Regex.
Pour commencer, le fonctionnement de ce script est simple, nous allons commencer par faire deux Array(Tableau), le premier Array contiendra la liste des regex de chacune des balises BBcode.Le deuxième, contiendra les regex de remplacement des balises (X)Html depuis le BBcode.
Ensuite, nous allons compter le nombre de cellules grâce à la fonction count pour connaitre le nombre de balises et ensuite faire une boucle qui parsera chaque balise BBcode au (X)html.
Bon, voici le script pour convertir du BBcode au (X)html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Parser du BBcode en (X)Html</title>
</head>
<body>
<?php
if(!isset($_GET['texte']))
{
$_GET['texte'] = 'Texte Normal
[b]Gras[/b]
[i]Italique[/i]
[u]Souligné[/u]
[s]Barré[/s]
[img]http://www.supportduweb.com/ftp/ybouane/scripts_astuces/php/bbcode_parser/img_apercu.png[/img]
[url]http://www.supportduweb.com/[/url]
[url=http://www.supportduweb.com/]Support du Web[/url]
[left]Gauche[/left]
[center]Centré[/center]
[right]Droite[/right]';
}
$_GET['texte'] = stripslashes($_GET['texte']);
$texte = $_GET['texte'];
$texte = nl2br(htmlentities($texte));
$entree = array(
'#\[b\](.*)\[/b\]#Usi',
'#\[i\](.*)\[/i\]#Usi',
'#\[u\](.*)\[/u\]#Usi',
'#\[s\](.*)\[/s\]#Usi',
'#\[img\](.*)\[/img\]#Usi',
'#\[url\](.*)\[/url\]#Usi',
'#\[url=(.*)\](.*)\[/url\]#Usi',
'#\[left\](.*)\[/left\]#Usi',
'#\[center\](.*)\[/center\]#Usi',
'#\[right\](.*)\[/right\]#Usi'
);
$sortie = array(
'<strong>$1</strong>',
'<em>$1</em>',
'<span style="text-decoration:underline;">$1</span>',
'<span style="text-decoration:line-through;">$1</span>',
'<img src="$1" alt="Image" />',
'<a href="$1">$1</a>',
'<a href="$1">$2</a>',
'<div style="text-align:left;">$1</div>',
'<div style="text-align:center;">$1</div>',
'<div style="text-align:right;">$1</div>'
);
$count = count($entree)-1;
for($i=0;$i<=$count;$i++)
{
$texte = preg_replace($entree[$i],$sortie[$i],$texte);
}
echo '<em>Version visuelle(Aperçu):</em><br />'.
$texte.
'<br /><br />'.
'<em>Version (X)html:</em>'.
'<pre>'.
htmlentities($texte).
'</pre>'.
'<em>Version BBcode(À éditer):</em><br />';
?>
<form action="bbcode2html.php" method="get">
<textarea cols="70" rows="10" name="texte"><?php echo htmlentities($_GET['texte']); ?></textarea><br />
<input type="submit" value="Convertir" />
</form>
</body>
</html>
Essayer
Pour faire l'inverse(convertir le (X)html au BBcode), nous allons simplement faire l'inverse dans les array mais aussi dans les regex.
Voci le script pour convertir le (X)html au BBcode:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Parser du (X)Html en BBcode</title>
</head>
<body>
<?php
if(!isset($_GET['texte']))
{
$_GET['texte'] = 'Texte Normal<br />
<strong>Gras</strong><br />
<em>Italique</em><br />
<span style="text-decoration:underline;">Souligné</span><br />
<span style="text-decoration:line-through;">Barré</span><br />
<img src="http://www.supportduweb.com/ftp/ybouane/scripts_astuces/php/bbcode_parser/img_apercu.png" alt="Image" /><br />
<a href="http://www.supportduweb.com/">http://www.supportduweb.com/</a><br />
<a href="http://www.supportduweb.com/">Support du Web</a><br />
<div style="text-align:left;">Gauche</div><br />
<div style="text-align:center;">Centré</div><br />
<div style="text-align:right;">Droite</div>';
}
$_GET['texte'] = stripslashes($_GET['texte']);
$texte = $_GET['texte'];
$texte = str_replace('<br />','',$texte);
$entree = array(
'#<strong>(.*)</strong>#Usi',
'#<em>(.*)</em>#Usi',
'#<span style="text-decoration:underline;">(.*)</span>#Usi',
'#<span style="text-decoration:line-through;">(.*)</span>#Usi',
'#<img src="(.*)" alt="Image" />#Usi',
'#<a href="(.*)">(.*)</a>#Usi',
'#<div style="text-align:left;">(.*)</div>#Usi',
'#<div style="text-align:center;">(.*)</div>#Usi',
'#<div style="text-align:right;">(.*)</div>#Usi'
);
$sortie = array(
'[b]$1[/b]',
'[i]$1[/i]',
'[u]$1[/u]',
'[s]$1[/s]',
'[img]$1[/img]',
'[url=$1]$2[/url]',
'[left]$1[/left]',
'[center]$1[/center]',
'[right]$1[/right]'
);
$count = count($entree)-1;
for($i=0;$i<=$count;$i++)
{
$texte = preg_replace($entree[$i],$sortie[$i],$texte);
}
echo '<em>Version BBcode:</em>'.
'<pre>'.
str_replace('&','&',htmlentities($texte)).
'</pre>'.
'<em>Version (X)html(À éditer):</em><br />';
?>
<form action="html2bbcode.php" method="get">
<textarea cols="70" rows="10" name="texte"><?php echo str_replace('&','&',htmlentities($_GET['texte'])); ?></textarea><br />
<input type="submit" value="Convertir" />
</form>
</body>
</html>
Essayer
Pour le deuxième code, il ne converti pas toutes les formes pour avoir un même résultat au BBcode mais seulement celle utilisée dans la première conversion.
Exemple:
<strong>Gras</strong> = <b>Gras</b>
Mais seul la première forme sera parsée
merci, j'espère que vous avez aimé ce script et qu'il vous sera utile.
Scripts et Tutoriels similaires