我正在尝试解析代表源代码的字符串,如下所示:
[code lang="html"]
<div>stuff</div>
[/code]
<div>stuff</div>
从我之前的20个问题可以看出,我尝试使用PHP的正则表达式函数,但遇到了很多问题,特别是当字符串很大时...
你们知道一个用PHP编写的BB解析器类,我可以用它而不是正则表达式吗?
我需要做的是:
[code]
代码中的所有内容[code]
标记之外的内容上运行某种过滤器(我的回调函数)谢谢
编辑: 我最终使用了这个:
将所有<pre>
和<code>
代码转换为[pre]和[code]:
str_replace(array('<pre>', '</pre>', '<code>', '</code>'), array('[pre]', '[/pre]', '[code]', '[/code]'), $content);
从[code] .. [/ code]和[pre] ... [/ pre]之间获取内容并进行html实体转换
preg_replace_callback('/(.?)\[(pre|code)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s', 'self::specialchars', $content);
(我从wordpress短代码函数中偷走了这个模式:)
将实体转换后的内容存储在临时数组变量中,并使用唯一ID替换$content
中的内容
我现在可以安全地在$content
上运行我的过滤器,因为其中没有代码,只有ID(此过滤器在整个文本上执行strip_tags并将http://blabla.com
之类的内容转换为链接)
将$content
中的唯一ID替换为数组变量中已转换的代码块
答案 0 :(得分:2)
HTML Purifier http://htmlpurifier.org/
但是你面临同样的问题,就像你之前的20个问题一样。
答案 1 :(得分:1)
你们知道一个用PHP编写的BB解析器类,我可以用它而不是正则表达式吗?
有the BBCode PECL extension,但你需要编译它。
还有PEAR's HTML_BBCodeParser,但我无法保证其有效性。
其他地方也有一些,但我认为它们都非常僵硬。
我不相信那些或者那些你正在寻找的东西,关于标记内容的回调(然后@webarto 完全正确的是HTMLPurifier是处理内容时使用的正确工具。你可能必须在这里写自己的。您可能会发现有用的I've previously written about my experiences doing the same。