Question

J'écris un petit module de blog. Je veux que les utilisateurs puissent taper BBCode. J'ai besoin de convertir cela en XHTML pour le stocker dans la base de données, ce que j'ai réussi à faire pour la plupart des balises, à l'exception de [url].

Il y a deux cas que je souhaite autoriser:

[url=http://stackoverflow.com/]

qui doit être converti en

<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>

et

[url=http://stackoverflow.com/]StackOverflow[/url]

qui doit être converti en

<a href="http://www.stackoverflow.com" title="StackOverflow">StackOverflow</a>

Malheureusement, je n'ai pas pu le faire. Les résultats ont été horribles, et je me demande si cela pourrait être fait dans une regex ou s'il doit être divisé en deux.

Était-ce utile?

La solution

Cela devrait fonctionner:

\[url\s*=\s*([^\]]*)]\s*((?:(?!\s*\[/url\]).)*)\s*\[/url\]|\[url\s*=\s*([^\]]*)]

Modèle de remplacement:

<a href="$1$3" title="$2">$2$3</a>

Testé avec cette entrée:

bla [url=http://stackoverflow.com/]StackOverflow[/url] bla
bla [url=http://stackoverflow.com/] bla

Retourne:

bla <a href="http://stackoverflow.com/" title="StackOverflow">StackOverflow</a> bla
bla <a href="http://stackoverflow.com/" title="">http://stackoverflow.com/</a> bla

Notez que dans tous les cas, vous devrez peut-être ajouter des éléments de validation / d'échappement, car des caractères XML non valides (" ;, < ;, > etc.) peuvent & "casser " le contenu de la balise.

Autres conseils

Quelque chose comme ce travail horrible devrait le faire:

\[url=([^\]]+)\](?:([^\[]+)\[\/url\])?

Lors de la mise en correspondance, cela devrait placer l’url dans $ 1 et le texte dans $ 2 s’il a été spécifié. Je n'ai pas encore testé cette solution, elle pourrait donc nécessiter quelques ajustements.

Fonction d'analyse BBCode2HTML ($ text)

https://code.google. com / p / pwision / source / parcourir / trunk / inc / BBCode.inc # 150

L’algorithme permettant de transformer le code BBCode 2 HTML est le suivant: 1) réglementer le texte BBCode code ici: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#60

2) transformer le BBCode réglementé en XML code ici: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#101

3) exécutez une transformation XSLT en texte XML. Le fichier XSLT est ici https://code.google.com/p/pwision /source/browse/trunk/inc/BBCodeXML2HTML.xslt La transformation est faite ici: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#113

J'espère que j'ai aidé!

PS: un bon tutoriel XSLT que vous pouvez trouver ici: http://www.w3schools.com/xsl/xsl_languages.asp

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