Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过str_replace、ereg_replace进行PHP解析-如何排除目标文本的一部分?_Php_Parsing_Formatting - Fatal编程技术网

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

通过str_replace、ereg_replace进行PHP解析-如何排除目标文本的一部分?,php,parsing,formatting,Php,Parsing,Formatting,我有一个用PHP定制的旧内容管理系统,用户可以在这里写文章 当显示正文文本时,我执行一系列str_replace和errg_replace调用来解析链接、标题和其他位 现在,需要能够在正文中输入一块HTML代码(偶尔),并且不被前面提到的函数解析。这些块实际上应该呈现为HTML 该块可以用标记(即[html]等)包围以识别它,但当我基本上只是在整个正文文本块上运行前面提到的函数时,如何排除对该部分的解析?显然,您需要解析不包括您希望保留原样的区域的内容。所以这里有一种方法可以做到: 对于每个[h

我有一个用PHP定制的旧内容管理系统,用户可以在这里写文章

当显示正文文本时,我执行一系列str_replace和errg_replace调用来解析链接、标题和其他位

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


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

显然,您需要解析不包括您希望保留原样的区域的内容。所以这里有一种方法可以做到:

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

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


继续正常解析,完成后用真实内容替换
[html]标识符[/html]
位。如果利用
/e
(将替换字符串评估为代码)选项,只需对所有块调用一次
preg\u replace

将整个文本块拆分为一个数组,将bbcode部分与html块分开。然后仅在每秒钟的数组块上应用手动str_replace调用。然后再合并。下面是如何实现上述方法的代码示例。