我目前有一大堆PHP替换/删除某些HTML标记模式:
$body = preg_replace('(<p><\/p>)', "", $body);
$body = preg_replace('(<div><br><\/div>)', "", $body);
$body = preg_replace('(<p><br><\/p>)', "", $body);
$body = preg_replace('(<p><ol>)', "<ol>", $body);
$body = preg_replace('(</ol></p>)', "</ol>", $body);
然而,它并没有删除“标签模式”的所有次出现,而只删除第一个。
我在SOF上看到了一些与此类问题相关的问题,但是,我还没有找到一个完全解决了我的问题的问题。
答案 0 :(得分:0)
要替换所有已知字符串,最好使用str_replace(),因为您确切知道要替换的内容。
答案 1 :(得分:0)
preg_replace
没有理由不删除所有匹配项,因为它默认为全局搜索,并且您的模式似乎是正确的。再次查看您的字符串结果,以确保未删除的标记与模式(可能不是这种情况)完全匹配。
但是,由于您要更换固定的子字符串,因此不需要使用正则表达式,更快捷的方法是使用strtr
:
$trans = array('<p></p>' => '',
'<div><br></div>' => '',
'<p><ol>' => '<ol>',
'</ol></p>' => '</ol>');
$body = strtr($body, $trans);
仅当您要处理带有可选空白字符的可选项时,才需要使用preg_replace
。另一种方法,使用DOMDocument