Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2571 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Traitement PHP pour balises type BBCODE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Traitement PHP pour balises type BBCODE

n°1517613
Proxounet
Posté le 21-02-2007 à 14:10:54  profilanswer
 

Bonjour,
 
Je met en place un système de propositions d'articles pour mon site,
Pour faire un lien dans leur article vers un logiciel référencé dans la base de donnée, les visiteurs sont invités à utiliser la synthaxe [log]id du logiciel[/log] :
chaine qui devra être remplacée par le nom du logiciel, avec un lien pointant vers une certaine adresse.
Ainsi, un simple preg replace ne suffit pas.
 
j'avais ainsi pensé vaguement à un preg replace suivit d'un eval, sans grande surprise cela ne marche pas :
 

Citation :

  $contenu = htmlentities($donnees['contenu']);
   $contenu = preg_replace("!\[log\](.+)\[/log\]!Ui","\".logiciel($1).\"",$contenu);
   eval("\$contenu = $contenu;" );


 
avec pour fonction logiciel :

Citation :

function logiciel($idlogiciel)
{
 $reponse = mysql_query("SELECT * FROM logiciels WHERE idlogiciel='$idlogiciel'" );
 while ( $donnees = mysql_fetch_array($reponse) )
 {
  $lien = "<a href=\"article-$idarticle-$idlogiciel.html\">".$donnees['nom']."</a>";
 }
 return($lien);
}


 
Comment appliquer cette fonction ?
 
Merci

mood
Publicité
Posté le 21-02-2007 à 14:10:54  profilanswer
 

n°1517620
FlorentG
Unité de Masse
Posté le 21-02-2007 à 14:28:20  profilanswer
 

Avec preg_replace, tu peux remplacer le contenu de [log]...[/log], et appeller une fonction qui va filer le remplacement. Avec le modifier 'e', c'est possible, regarde dans la doc de preg_replace, exemple 1626

n°1517709
Proxounet
Posté le 21-02-2007 à 15:26:07  profilanswer
 

J'ai beau essayer de m'acrocher, j'ai vraiment du mal à comprendre preg replace,
j'ai essayer plusieurs choses, dont ca,  
forcement, ca ne fonctionne pas

Citation :

$contenu = preg_replace("/\[log\](.+)\[/log\]/e",".logiciel('\\1').",$contenu);


Pourrais je avoir une aide un petit plus précise ?
merci pour cette premièr réponse en tout cas

n°1517753
-ThX-
Not here anymore
Posté le 21-02-2007 à 16:03:16  profilanswer
 

http://forum.hardware.fr/hfr/Progr [...] 1480_1.htm
 
Si ca peut t'aider, j'ai planché dessus cette semaine

n°1517887
FlorentG
Unité de Masse
Posté le 21-02-2007 à 17:59:29  profilanswer
 

Les quotes sont très importantes, ce sera plutôt de la forme :

Code :
  1. $contenu = preg_replace("/\[log\](.+)\[/log\]/e", "logiciel('\\1')", $contenu);

n°1517910
sielfried
Posté le 21-02-2007 à 18:35:46  profilanswer
 

Attention aussi à escaper les / dans la regex si on l'entoure de /.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1518005
Proxounet
Posté le 21-02-2007 à 22:22:22  profilanswer
 

Je suis désolé c'est encore du chinois pour moi;
Florent, toujours même erreur on dirait :  

Citation :

Warning: preg_replace() [function.preg-replace]: Unknown modifier 'l' in /home/henol/public_html/v2/pages/article-pre.php on line 101


je sais que j'en demanderais beaucoup si je demandais le preg_replace qui conviendrait dans mon cas, et qu'on m'explique en très gros les symboles, mais on sais jamais :)

n°1518009
sielfried
Posté le 21-02-2007 à 22:33:59  profilanswer
 

D'où mon dernier message...  
 
Escaper = mettre un backslash devant.
 
Donc  
$contenu = preg_replace("/\[log\](.+)\[\/log\]/e", "logiciel('\\1')", $contenu);
 
(ou remplacer le caractère englobant par autre chose... j'aime bien # qu'on retrouve rarement à l'intérieur)
 
Sinon, remets l'option U au passage.


Message édité par sielfried le 21-02-2007 à 22:34:13

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1518011
Proxounet
Posté le 21-02-2007 à 22:44:16  profilanswer
 

Ok j'arrivais à l'instant a faire fonctionner ca mais c'était bien moins propre que ce qe tu me propose;
en tout cas merci beaucoup.
Preg replace reste vraiment un monde a part, faudrait que je m'attarde dessus parceque là j'arrive pas a piger une seul des phrases explicatives.
La par exemple c'est caractère englobant que je pige pas :p

n°1518015
jukieng
Posté le 21-02-2007 à 22:55:55  profilanswer
 

Il est préférable d'utiliser preg_replace_callback(), qui est plus adaptée à ta situation.
 
http://fr.php.net/preg_replace_callback


---------------
ilonet - Internet, Informatique et Webmastering

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Traitement PHP pour balises type BBCODE

 

Sujets relatifs
verifier fichier (extension, type mime...) depuis un applet java[PHP] fonction exec() et droits
Capture d'écranImpact du type de champ sur les perfs d'insertion
[RESOLU] Probleme pour renommer les fichiers PHP[PHP] La fonction mail() ... me rappelle plus ...
[PHP]Problème if else if et connexion[Php] Indexation de document Pdf, Doc ou Xls sous PHP / MySQL
Je cherche ce Script PHP[PHP] Réponses à un questionnaire en ligne
Plus de sujets relatifs à : Traitement PHP pour balises type BBCODE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR