Page 1 sur 1
parser de BBcode, probleme
Posté : 27 janv. 2006, 16:08
par VaN
Hello,
travaillant actuellement sur la creation d'un forum, je viens de créer une fonction qui me parse du texte, pour tranformer le bbcode en html.
Pour les balises
, etc, pas de probleme.
par contre, je rencontre un probleme pour tranformer en
Comment récuperer le pseudo ? en coupant la chaine de caracteres ?
Est ce la methode utilisée pour parser du bbcode, ou existe 'il plus simple ?
Posté : 27 janv. 2006, 17:00
par didgar
Salut !
J'ai eu le même pb que toi la semaine passée ! J'ai une solution qui n'est pas obligatoirement la meilleure mais cela fonctionne.
Voir
mon post. J'y expose mon pb et la solution que j'ai adoptée !
A+
Didier
Posté : 27 janv. 2006, 17:21
par VaN
Je vois que tu utilise preg_match_all(), qui va chercher les valeurs entre " ".
<?php
preg_match_all("|"(.*)"|U",$texte,$out,PREG_PATTERN_ORDER);
for($i=0;$i<count($out[1]);$i++)
{
$bbcode["[quote="".$out[1][$i].""]" ] = "<span class='auteur'>".$out[1][$i]." a écrit :</span><div class='citation'>";
}
?>
Mais que ce passe t'il si une personne ecrit par exemple
hello, tu connais "phpfrance"
?
Cela va provoquer des erreurs nan ?
Posté : 27 janv. 2006, 17:38
par didgar
Je vois que tu utilise preg_match_all(), qui va chercher les valeurs entre " ".
<?php
preg_match_all("|"(.*)"|U",$texte,$out,PREG_PATTERN_ORDER);
for($i=0;$i<count($out[1]);$i++)
{
$bbcode["[quote="".$out[1][$i].""]" ] = "<span class='auteur'>".$out[1][$i]." a écrit :</span><div class='citation'>";
}
?>
Mais que ce passe t'il si une personne ecrit par exemple
hello, tu connais "phpfrance"
?
Cela va provoquer des erreurs nan ?
Excellente remarque ... que j'ai du me faire à un moment ou à un autre après avoir posté ma solution. Je viens de vérifier le script qui tourne actuellement. Il y a une modification :
preg_match_all("|quote="(.*)"|U",$message_brut,$out,PREG_PATTERN_ORDER); // recup d'un tableau associatif $out -> pour les citations
Et là ça fonctionne très bien !
A+
Didier
Posté : 27 janv. 2006, 18:34
par VaN
pourrais-tu m'expliquer à quoi sert le 'U' dans |quote="(.*)"|U ?
merci
Posté : 27 janv. 2006, 18:40
par Hubert Roksor
http://fr2.php.net/manual/fr/reference. ... ifiers.php
Je tiens à vous signaler qu'un parser est un mécanisme très complexe si l'on veut l'implémenter correctement donc si vous débutez en PHP (cf le nom du forum) je vous recommanderais plutôt d'utiliser une solution préexistante. (phpBB par exemple)
Posté : 27 janv. 2006, 18:43
par didgar
pourrais-tu m'expliquer à quoi sert le 'U' dans |quote="(.*)"|U ?
merci
A priori à rien

J'l'avais oublié celui-ci !
C'est un "oubli de nettoyage de copier-coller sur php.net"
Sinon ça marche pour toi ? Ca t'a aidé ?
A+
Didier
Posté : 27 janv. 2006, 19:07
par didgar
pourrais-tu m'expliquer à quoi sert le 'U' dans |quote="(.*)"|U ?
merci
A priori à rien

J'l'avais oublié celui-ci !
C'est un "oubli de nettoyage de copier-coller sur php.net"
Sinon ça marche pour toi ? Ca t'a aidé ?
A+
Didier
/!\ Mon oubli est un bon oubli ! Si tu ôtes le "U" cela ne fonctionne plus !!!!
A+
Didier
Posté : 27 janv. 2006, 19:07
par VaN
Je tiens à vous signaler qu'un parser est un mécanisme très complexe si l'on veut l'implémenter correctement donc si vous débutez en PHP (cf le nom du forum) je vous recommanderais plutôt d'utiliser une solution préexistante. (phpBB par exemple)
Helas je ne peux pas récupérer une solution existante, car je developpe ce nouveau forum justement pour me debarasser de phpBB.
@didgar : nan, je m'en sors pas vraiment..
Posté : 27 janv. 2006, 19:10
par didgar
@didgar : nan, je m'en sors pas vraiment..
La j'ai pas trop le temps mais ce soir vers 22h00 je me rebranche et je te poste un ex concret.
/!\ contrairement à ce que je disais plus haut, le "U" a son importance.
A toute.
Didier
Posté : 27 janv. 2006, 23:14
par didgar
@VaN
Voila un exemple complet.
J'ai développé ça dans le cadre d'une messagerie interne d'un projet sur lequel je bosse. Ce code fonctionne avec autant de niveaux de citation que le message en comporte. Il fonctionne aussi avec les citations non nominatives.
Ex :
Avec un peu de chance, ça devrait pouvoir s'intégrer dans ce que tu as développé pour toi.
Code : Tout sélectionner
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.citation{
margin:10px;
padding:10px;
border:1px solid #000;
background-color:#FFF;
}
.auteur {
font-weight:bold;
margin:10px;
}
-->
</style>
</head>
<body>
<?php
$message_brut='[quote="toto"]hello, tu connais "phpfrance" ?[/quote]
ben oui "et toi" ?
A+
Didier'; // ça c'est le message que te renvoie ta base de données
$bbcode=array(
"[quote]" => "<div class=\"citation\">",
"[/quote]" => "</div>",
"[b]" => "<strong>",
"[/b]" => "</strong>",
"[i]" => "<em>",
"[/i]" => "</em>",
"[u]" => "<u>",
"[/u]" => "</u>"
);
////////////////////////////////////////// pour les citations /////////////////////
preg_match_all("|quote="(.*)"|U",$message_brut,$out,PREG_PATTERN_ORDER); // recup d'un tableau associatif $out -> pour les citations // voir php.net pour toutes les explications ;-)
for($i=0;$i<count($out[1]);$i++)
{
$bbcode["[quote="".$out[1][$i].""]" ] = '<span class="auteur">'.$out[1][$i].' a écrit :</span><div class="citation">'; // fabrication à la volée du bbcode qui va bien ;-)
}
$print_message = str_replace(array_keys($bbcode), array_values($bbcode), $message_brut); // on mouline le message brut ou le bbcode sera remplace par du html
echo '<p>'.nl2br($print_message).'</p>'; // on affiche le resultat
?>
</body>
</html>
J'espère que ça t'aide un minimum.
N'hésites pas à me contacter si tu as besoin
A+
Didier
Posté : 31 janv. 2006, 15:20
par VaN
ça marche nickel. merci bcp : )
Posté : 31 janv. 2006, 15:30
par didgar
ça marche nickel. merci bcp : )
Et ben voila !
Content de t'avoir aidé !
A+
Didier
Posté : 31 janv. 2006, 15:44
par VaN
je refait le meme pour les url mtnt : )
j'arrive a transformer
en
http://www.phpfrance.com.
mais je me demande si il serait possible de transformer
en
clic ici pour phpfrance.
EDIT : Ah bin on dirait que ça marche tout seul : )