0

我正在写一个小博客模块。我希望用户能够输入 BBCode。我需要将其转换为 XHTML 以存储在数据库中,我设法为大多数标签执行了此操作,但[url].

我想允许两种情况:

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

应该转换为

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

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

应该转换为

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

可悲的是,我一直无法做到这一点。结果太可怕了,我想知道这是否可以在一个正则表达式中完成,或者是否必须一分为二。

4

3 回答 3

2

像这样可怕的工作应该做到这一点:

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

匹配后,如果已指定,这应该将 url 放在 $1 中,将文本放在 $2 中。我还没有对此进行测试,因此可能需要进行一些调整。

于 2009-10-27T18:48:18.993 回答
2

这应该有效:

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

更换模式:

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

使用此输入进行测试:

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

回报:

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

请注意,在任何情况下,您都可能需要添加一些验证/转义,因为无效的 XML 字符(“、<、> 等)可能会“破坏”标签内容。

于 2009-10-27T19:02:10.887 回答
0

分析函数 BBCode2HTML($text)

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

转换 BBCode 2 HTML 的算法是: 1)在此处规范 BBCode 文本代码: https ://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#60

2) 在此处将受监管的 BBCode 转换为 XML 代码: https ://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#101

3) 对 XML 文本运行 XSLT 转换。XSLT 文件在这里 https://code.google.com/p/pwision/source/browse/trunk/inc/BBCodeXML2HTML.xslt 转换在这里完成: https://code.google.com/p/pwision/源/浏览/主干/inc/BBCode.inc#113

希望我有所帮助!

PS:你可以在这里找到一个很好的 XSLT 教程:http: //www.w3schools.com/xsl/xsl_languages.asp

于 2013-01-11T08:52:14.573 回答