8792 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaie de programmer un système de BBCode pour mon site, tout fonctionne sauf lorsque je veux imbriquer plusieurs BBCode,

Du genre:
[URL U="..." T="..."][THUMB T="..."]...[/THUMB][/URL]


Le code:
[THUMB T="..."]...[/THUMB]
est correctement parsé, par contre pour [URL U="..., la regexp prend en compte la totalité du code généré, donc cela donne:
<a href="..." T="..." onclick="..." T="..."><img src="..." alt="..." /></a>


Je pense que le la solution que les " ne soient pas pris en compte dans la condition de la regexp (.*?), je ne sais pas comment faire ceci.

Voici le code PHP:


$pattern = array(
  '`\[THUMB T="(.*?)"](.*?)\[/THUMB]`',
  '`\[URL U=".*?" T=".*?"](.*?)\[/URL]`'
);

$replace = array(
  '<img src="$2" class="item-picture" alt="$1" />',
  '<a href="$1" onclick="javascript:window.open(\'$1\'); return false" title="$3">$2</a>',
);

$content = preg_replace($pattern, $replace, $content);  




Merci d'avance pour toute aide, il me reste juste à résoudre ce problème pour terminer mon dernier site, tout fonctionne autrement. @++
Alors, j'ai pas le courage de tester à cette heure, mais bon, ça devrait le faire.

<?php

$pattern = array(
	'`\[THUMB T="([^"]+)"](.*?)\[/THUMB]`i',
	'`\[URL U="([^"]+)" T="([^"]+)"](.*?)\[/URL]`i'
);

$replace = array(
	'<img src="$2" class="item-picture" alt="$1" />',
	'<a href="$1" onclick="javascript:window.open(\'$1\'); return false" title="$2">$3</a>'
);

$content = preg_replace($pattern, $replace, $content);

?>

J'ai ajouté l'option i qui fait une recherche insensible à la case et permet ainsi de noter les noms des balises et attributs aussi bien en majuscules qu'en miniscules.

Edit: tu peux jeter un oeil sur ExpReg.com, si jamais tu ne l'as pas déjà fait.
Modifié par Bouda (07 Sep 2006 - 02:07)
Bouda a écrit :


Edit: tu peux jeter un oeil sur ExpReg.com, si jamais tu ne l'as pas déjà fait.


L'auteur de ce site est plutot CONTRE le bbcode Smiley cligne mais bon, y'a des choses à apprendre c'est sur.
J'ai essayé il y a quelques mois de développer un parser BBCode générant du XHTML, avec des tonnes d'expressions régulières... j'ai lâché l'affaire. Finalement j'ai opté pour la classe Wiki2xhtml de dotclear, et ça me convient parfaitement. A noter qu'il y a un autre site français qui proposer une classe de conversion wiki vers XHTML... mais j'ai oublié lequel !