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


PHP parsing via str_replace, ereg_replace - how to exclude a section of the target text?

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

当显示主体文本时,我执行一堆str_replace和ereg_replace调用来解析链接、标题和其他位。

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

块可以包围在一个标签(即[html]等)来识别它,但我如何排除解析这一节当我基本上只是运行前面提到的函数在整个正文文本块?

显然,您需要解析而不是包含您希望保持原样的区域的内容。这里有一种方法:

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

将标识符和对应[html]块的内容保存在一个数组中,以标识符作为键。然后将输入中的子字符串[html]blah[/html]替换为[html]identifier[/html]

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