我正在写一个小博客模块。我希望用户能够输入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>
可悲的是,我一直无法做到这一点。结果可怕,我想知道这是否可以在一个正则表达式中完成,或者是否必须分成两部分。

有帮助吗?

解决方案

这应该有效:

\[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字符(<!> quot;,<!> lt;,<!> gt;等)可能<!>“break <!> QUOT;标签内容。

其他提示

像这件令人毛骨悚然的工作应该做的事情:

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

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

Analize function BBCode2HTML($ text)

https://code.google。 COM / p / pwision /源/浏览/中继/ 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/source/browse/trunk/inc/BBCode.inc#113

希望我帮忙!

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top