当前位置:  开发笔记 > 编程语言 > 正文

解析bbcode的最佳方法

如何解决《解析bbcode的最佳方法》经验,为你挑选了3个好方法。

我想在php网站上使用bbcode过滤器.(我正在使用cakephp,它将是一个bbcode助手)我有一些要求.

Bbcodes可以嵌套.所以这样的事情是有效的.

[block]  
    [block]  
    [/block]  
    [block]  
        [block]  
        [/block]  
    [/block]  
[/block]  

Bbcodes可以有0个或更多参数.

例:

[video: url="url", , ]Title[/video]

Bbcodes可能有多种行为.

让我们说,[url]text[/url]将被转换为[url:url="text"]text[/url] 或视频bbcode将能够在youtube,dailymotion ....

我认为它涵盖了我的大部分需求.我总是用正则表达式做点什么.但我最大的问题是匹配参数.事实上,我得到嵌套的bbcode工作和bbcode 0参数.但是,当我为参数添加正则表达式匹配时,它与嵌套的bbcode无法正确匹配.

"\[($tag)(=.*)\"\](.*)\[\/\1\]" //它不是.*但是非gready matcher

我现在没有完整的正则表达式,但我有一些看起来像那样的东西(上图).

那么有没有办法有效地匹配bbcode与正则表达式或其他东西.我唯一能想到的是使用访问者模式并以这种方式将我的文本与每个可能的标签分开,我可以对文本解析有更多的控制权,我可以验证我的文档,所以如果输入文本没有没有有效的bbcode.在保存任何内容之前,我可以通过错误通知用户.

我会使用sablecc来创建我的文本解析器. http://sablecc.org/

有什么好主意吗?或任何可能导致高效灵活的bbcode解析器的东西?

谢谢,抱歉我的英文不好......



1> Chad Birch..:

有几个现有的库用于解析BBCode,它可能比尝试推送自己的更容易:

这是一对,我相信如果你环顾四周还有更多:
PECL bbcode
PEAR HTML_BBCodeParser



2> 小智..:

我自己正在研究bbcode解析器.他们中的大多数使用正则表达式和PHP4并在PHP 5.2+上产生错误或根本不工作.PECL bbcode和PEAR HTML_BBCodeParser似乎不再维护(2012年末),并且不容易安装在我必须使用的共享主机设置上.StringParser_BBCode工作与5.2+一些小的调整,但添加新的标签的方法很麻烦,这是最后更新于2008年.

埋在Bing搜索的第4页(我变得绝望)我找到了jBBCode,它看起来很新,需要PHP 5.3.麻省理工学院Lisence.我还没有尝试构建自定义标签,但到目前为止,它是我尝试过的唯一一个在PHP 5.3共享主机帐户上开箱即用的标签.



3> Alan Storm..:

有一个pecl和PEAR BBCode解析库.软件足够努力,无需重复多年的工作.

如果这些都不是一个选项,我会专注于将BBCode转换为有效的XML字符串,然后使用您喜欢的XML解析例程.这里非常粗略的想法,但是

    通过htmlspecialchars运行代码以转义任何需要转义的实体

    将所有[和]字符分别转换为<和>

    不要忘记在[tagname:

如果BBCode是正确嵌套的,那么应该将所有设置为将此字符串传递给XML解析对象(SimpleXML,DOMDocument等)


这是一个可怕的想法.[script] ... [/ script]会怎么做?
是的,如果您计划输出HTML,这非常糟糕.我写的是假设你正在解析BBCode来提取信息.如果您正在使用除官方BBCode解析器之外的任何东西(在第一段中提到),您必然会对XSS攻击持开放态度.
推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有