Frage

Ich schreibe ein kleines Blog-Modul. Ich möchte, dass die Benutzer in der Lage sein BBCode eingeben. Ich brauche das zu XHTML konvertieren in der DB zu speichern, die ich für die meisten der Tags zu tun verwaltet, mit Ausnahme [url].

Es gibt zwei Fälle, die ich zulassen möchten:

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

, die zu konvertierende sollte

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

und

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

, die zu konvertierende sollte

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

Leider habe ich nicht in der Lage gewesen, das zu tun. Die Ergebnisse wo schrecklich, und ich frage mich, ob dies in einer Regex getan werden könnte, oder wenn es in zwei Teile gespalten werden muss.

War es hilfreich?

Lösung

Dies sollte funktionieren:

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

Ersatz Muster:

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

Getestet mit diesem Eingang:

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

Returns:

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

Beachten Sie, dass in jedem Fall können Sie einige Validierung / entkommen, als ungültige XML-Zeichen hinzufügen müssen (“, <,> usw.) "break" die Tag-Inhalte.

Andere Tipps

So etwas wie dieses grässliche Stück Arbeit sollte es tun:

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

Beim Matching, soll dies die URL in $ 1 setzen und den Text in $ 2, wenn es angegeben wurde. Ich habe nicht testen dies noch so es einige Optimierungen erforderlich machen könnten.

Analize Funktion BBCode2HTML ($ text)

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

Der Algorithmus BBCode 2 HTML zu verwandeln: 1) regulieren die BBCode Text Code hier: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#60

2) transformieren die geregelte BBCode zu XML Code hier: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#101

3) eine XSLT-Transformation an den XML-Text ausgeführt werden. Die XSLT-Datei ist hier https://code.google.com/p/pwision /source/browse/trunk/inc/BBCodeXML2HTML.xslt Die Transformation wird hier getan: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#113

Hope ich geholfen!

PS: ein gutes XSLT-Tutorial finden Sie hier: http://www.w3schools.com/xsl/xsl_languages.asp

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top