我在PHP中有一个旧的自定义内容管理系统,用户可以在其中撰写文章。
当显示正文时,我会做一堆str_replace和ereg_replace调用来解析链接和标题以及其他位。
现在,需要能够在正文中输入HTML代码块(偶尔),并且不需要通过前面提到的函数进行解析。这些块实际上应该呈现为HTML。
块可以被标记(即[html]等)包围以识别它,但是当我基本上只是在整个正文文本块上运行前面提到的函数时,如何排除对该部分的解析? / p>
答案 0 :(得分:0)
显然,您需要解析 not 包含您想要保留的区域的内容。所以这是你可以做到的一种方式:
对于每个[html]
块,生成唯一标识符(例如,通过uniqid
或散列某些内容,可能是块的内容)。检查这个标识符(应该是不受到其他解析影响的东西,因此alphanum将是一个不错的选择)实际上并不存在于文本中。如果是,则生成另一个。
使用标识符作为键,将对应的[html]
块的标识符和内容保存在数组中。然后在输入中用{{1}}替换子串[html]blah[/html]
。
继续正常解析,完成后用实际内容替换[html]identifier[/html]
位。如果您利用[html]identifier[/html]
(评估替换字符串作为代码)选项,只需对所有块调用preg_replace
即可执行此操作。