Php页面标记控件

时间:2011-10-12 14:43:09

标签: php codeigniter replace markup

我有一个页面,用户可以自己发帖子,用户可以用以下标签标记他们的帖子:

{strong}{/strong} or {italic}{/italic} or {title}{/title} etc ...

对我来说困难的是让他们不要介入他们之间。

我的意思是没关系:

{strong}{/strong} {italic}{/italic}

但我需要避免所有可能的情况:

{strong}{italic}{/strong}{/italic}
{italic}{strong}{/italic}{italic}{/strong}{/italic}
{italic}{/strong}{/italic}{/strong}{/italic}

等等...真的有太多的情况要写一个控制foreach一个我认为:P

逻辑应该是让它们始终分开并删除不需要或包含的标签......希望问题很清楚:P

1 个答案:

答案 0 :(得分:2)

您的问题的一般解决方案是开发recursive descent parserstack based parser,但可能会因您的情况而完全矫枉过正。

匹配的开始标记与结束标记通常非常类似于平衡括号的语言(例如:(),(()),(()())是否正确平衡,)(,()(,) (()()不是)。平衡括号的语言不是常规语言,因此不能使用正则表达式“解析”(除非你可以限制它们可以嵌套的深度,见here)。

我的建议是将所有伪标签转换为实际的html标签,然后用PHP's Document Object Model解析。