Traitement PHP pour balises type BBCODE - PHP - Programmation
Marsh Posté le 21-02-2007 à 14:28:20
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
Marsh Posté le 21-02-2007 à 15:26:07
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
Marsh Posté le 21-02-2007 à 16:03:16
http://forum.hardware.fr/hfr/Progr [...] 1480_1.htm
Si ca peut t'aider, j'ai planché dessus cette semaine
Marsh Posté le 21-02-2007 à 17:59:29
Les quotes sont très importantes, ce sera plutôt de la forme :
Code : |
Marsh Posté le 21-02-2007 à 18:35:46
Attention aussi à escaper les / dans la regex si on l'entoure de /.
Marsh Posté le 21-02-2007 à 22:22:22
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
Marsh Posté le 21-02-2007 à 22:33:59
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.
Marsh Posté le 21-02-2007 à 22:44:16
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
Marsh Posté le 21-02-2007 à 22:55:55
Il est préférable d'utiliser preg_replace_callback(), qui est plus adaptée à ta situation.
http://fr.php.net/preg_replace_callback
Marsh Posté le 21-02-2007 à 14:10:54
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 :
$contenu = htmlentities($donnees['contenu']);
$contenu = preg_replace("!\[log\](.+)\[/log\]!Ui","\".logiciel($1).\"",$contenu);
eval("\$contenu = $contenu;" );
avec pour fonction logiciel :
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