我在php中创建了一个非常简单的标记解析器。但是,它目前使用str_replace在标记和html之间切换。如何创建一个“代码”框(最终将使用GeSHI),其内容未受影响?
现在,以下标记:[code][b]Some bold text[/b][/code]
最终解析为<b>Some bold text</b>
的代码框。
我需要一些建议,哪个选项最好?
还有其他选择吗?这比我想象的要难一点......
编辑:是否值得为此解析器添加代码框类型的东西?我的意思是,我看到它是如何有用的,但对于一个小结果来说,这是一个相当大的努力。答案 0 :(得分:3)
你为什么要重新发明轮子?
已经有很多markup parsers。
无论如何,只是str_replace无济于事。您必须学习正则表达式,正如他们所说,now you've got two problems;)
答案 1 :(得分:2)
为了使用str_replace,您可以将其分解为多个字符串。拆分[code]和[/ code]标签上的字符串 - 将代码框保存在单独的字符串中。以某种方式记下它在原始字符串中的位置。然后在原始字符串上使用str_replace,并在代码框字符串上执行您喜欢的任何解析。最后重新插入已解析的代码框并显示。
只是提醒一句,将输入转换成html进行显示会让我感到非常危险。在转换为html进行重新显示之前,我建议进行大量的输入清理和检查。
答案 2 :(得分:0)
HTML美化非常甜蜜。 http://pear.php.net/package/PHP_Beautifier。有一个装饰类也可能适合你的需要。
答案 3 :(得分:0)
要清楚,您的问题分为两部分。第一部分是需要一个词法分析器将你的“代码”分解为你的“语言”的关键词。一旦你有了词法分析器,你就需要一个解析器。解析器是一种代码,它以逻辑(通常是递归 - 下降的方式)方式一次一个地接受您的语言的关键字。