(08-12-2009, 04:53 PM)Zamentur a écrit : Une piste:preg_replace_callback
je suis embêté (pas encore essayé mais je tape du code sans avoir php au bureau là...) en effet j'aimerai que la fonction appelée soit une méthode de classe
mais comment faire ?
Code PHP :
<?php
$texte = preg_replace_callback("\[ref\]([^\[]*)\[/ref\]", "$this->ajouteReference", $texte);
ce code pourrait marcher ?
en tout cas, si cela marche , la solution me conviendrait
sinon, il faudrait que je parte sur du procédural, avec des variables statiques dans tous les sens (enfin deux ^^), beurk quoi :p
et puis je me lance tiens (boulot pas top aujourd'hui ^^)
il est possible qu'il y ait quelques fautes de syntaxe, je ne pourrais valider que cette nuit mais qu'en pensez vous ?
Code PHP :
<?php
function bbCode($texte)
// remplace les balises BBCode par des balises HTML
{
$texte = remplace($texte,'b');
$texte = remplace($texte,'i');
$texte = remplace($texte,'u');
// \\1 est le résultat de la première ( ), \\2 de la deuxieme, etc ... \\0 est l'ensemble
// dans le cas ci dessous, on s'attend à avoir le formalisme [img]http//www.ddd.ddd.ddd.gif alt="description du alt"[/gif]
// IMAGES
$texte=preg_replace("\[img\]([^\[]*) ?alt=\"([^[]*)\"\[/img\]",
"<img src=\"\\1\" alt=\"\\2\" />", $texte);
// dans le cas ci dessous, on s'attend à avoir le formalisme [ref]toto le beau[/gif]
// REFERENCES
$texte = preg_replace_callback("\[ref\]([^\[]*)\[/ref\]", "ajouteReference", $texte);
return $texte;
}
function ajouteReference($correspondance)
{
static $ref = NULL;
if ($ref === NULL )
{
//chargement PDO
}
if (isset( $ref[$correspondance[1] ] ) )
{
$r = "<a class='lienBulle' id='".$ref[$correspondance[1] ]['id'].
"' href='http://lapage?id=".$ref[$correspondance[1] ]['id']."'>".
$ref[$correspondance[1] ]['label']."</a>";
$r .="<div id='s".$ref[$correspondance[1] ]['id']."' class='bulle cache'>".
$ref[$correspondance[1] ]['description']."</div> ";
}
else
$r ="[erreur sur ".$correspondance[1]." ==> pas trouvé de référence]";
return $r;
}
function remplace($texte, $bb, $html=NULL)
{
if ($html === NULL)
$html = $bb;
$texte=preg_replace('\['.$bb.'\]', '<'.$html.'>', $texte);
$texte=preg_replace('\[/'.$bb.'\]', '</'.$html.'>', $texte);
//ou bien
$texte=preg_replace('\['.$bb.'\](.+)\['.$bb.'\]', '<'.$html.'>//1</'.$html.'>', $texte); // à voir le plus rapide
return $texte;
}