PHP解析通过str_replace,ereg_replace - 如何排除目标文本的一部分?

时间:2011-12-18 22:55:29

标签: php parsing formatting

我在PHP中有一个旧的自定义内容管理系统,用户可以在其中撰写文章。

当显示正文时,我会做一堆str_replace和ereg_replace调用来解析链接和标题以及其他位。

现在,需要能够在正文中输入HTML代码块(偶尔),并且不需要通过前面提到的函数进行解析。这些块实际上应该呈现为HTML。

块可以被标记(即[html]等)包围以识别它,但是当我基本上只是在整个正文文本块上运行前面提到的函数时,如何排除对该部分的解析? / p>

1 个答案:

答案 0 :(得分:0)

显然,您需要解析 not 包含您想要保留的区域的内容。所以这是你可以做到的一种方式:

对于每个[html]块,生成唯一标识符(例如,通过uniqid或散列某些内容,可能是块的内容)。检查这个标识符(应该是受到其他解析影响的东西,因此alphanum将是一个不错的选择)实际上并不存在于文本中。如果是,则生成另一个。

使用标识符作为键,将对应的[html]块的标识符和内容保存在数组中。然后在输入中用{{​​1}}替换子串[html]blah[/html]

继续正常解析,完成后用实际内容替换[html]identifier[/html]位。如果您利用[html]identifier[/html](评估替换字符串作为代码)选项,只需对所有块调用preg_replace即可执行此操作。