Question

J'écris un peu de PHP pour convertir BBcode en HTML.

Je voudrais convertir ce BBcode:

[quote]
Hello World
[/quote]

à ce qui suit:

<blockquote>Hello World</blockquote>

La fonction preg_replace que j'utilise pour effectuer c'est:

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);

Cela fait presque tout ce que je besoin, mais mon problème est qu'il porte à travers le \ n de avant et après « Bonjour tout le monde », et produit:

<blockquote>
Hello World
</blockquote>

Toutes les idées comment je pourrais résoudre ce problème? Toute aide très appréciée.

Était-ce utile?

La solution

Essayer cette expression régulière:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s

Autres conseils

Vous devez échapper à l'intérieur de la barre oblique inverse entre guillemets doubles. Au lieu de "\ [", vous avez besoin "\\ [".

Une possibilité serait d'utiliser le « e » regex modificateur , d'appeler, par exemple, la fonction trim sur la chaîne.

Citant cette page du manuel:

  

e (PREG_REPLACE_EVAL)
Si ce modificateur est défini, preg_replace()   fait la substitution normale des   dans le remplacement des backreferences   chaîne, il évalue code PHP, et   utilise le résultat pour remplacer le   chaîne de recherche. Les guillemets simples, doubles   citations, barre oblique inverse (\) et NULL   caractères seront préfixés par un antislash   dans backreferences substitués.

     

Seulement preg_replace() utilise   modificateur; elle est ignorée par d'autres PCRE   fonctions.


Par exemple, ce code, légèrement différent du vôtre:

$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;

$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);

Souhaitez-vous donner:

string '<blockquote>Hello World</blockquote>' (length=36)

soit le trim fonction est appelée sur ce qui a été adaptée - constater supprimera tous les espaces blancs- au début et à la fin de votre chaîne; non seulement les nouvelles lignes, mais aussi des espaces et des tableaux.

(Par exemple, vous pouvez jeter un oeil à Exemple # 4 sur le page de manuel de preg_replace )
(Il est peut-être un peu exagéré dans ce cas, devrais-je ajouter - mais il est bon de savoir de toute façon)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top