parser de BBcode, probleme

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : parser de BBcode, probleme

par VaN » 31 janv. 2006, 15:44

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 : )

par didgar » 31 janv. 2006, 15:30

ça marche nickel. merci bcp : )
Et ben voila ! \:D/

Content de t'avoir aidé !

A+

Didier

par VaN » 31 janv. 2006, 15:20

ça marche nickel. merci bcp : )

par didgar » 27 janv. 2006, 23:14

@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 :

Code : Tout sélectionner

[quote] ... bla bla ... [/quote]
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

par didgar » 27 janv. 2006, 19:10

@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

par VaN » 27 janv. 2006, 19:07

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..

par didgar » 27 janv. 2006, 19:07

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" :twisted:

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

par didgar » 27 janv. 2006, 18:43

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" :twisted:

Sinon ça marche pour toi ? Ca t'a aidé ?

A+

Didier

par Hubert Roksor » 27 janv. 2006, 18:40

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)

par VaN » 27 janv. 2006, 18:34

pourrais-tu m'expliquer à quoi sert le 'U' dans |quote="(.*)"|U ?

merci

par didgar » 27 janv. 2006, 17:38

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

par VaN » 27 janv. 2006, 17:21

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 ?

par didgar » 27 janv. 2006, 17:00

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

parser de BBcode, probleme

par VaN » 27 janv. 2006, 16:08

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

Code : Tout sélectionner

[quote=Pseudo]...blabla..[/quote]
en

Code : Tout sélectionner

<div>Pseudo <br /> ...blabla..</div>
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 ?