给出以下字符串:
asd <div> def foo </div> ghi <div> moo </div>
我想删除
内的所有<div>
,导致:
asd <div> def foo </div> ghi <div> moo </div>
我可以使用任何标准的PHP内容,但我不确定如何解决问题。在删除<div>
内
我之所以需要这个,是因为WordPress的内容过滤器会在奇怪的情况下添加
。我不能简单地删除所有
,因为它们可能是由用户专门输入的,但是我需要删除由于它们导致显示问题的元素中的所有元素
答案 0 :(得分:1)
$text = "asd <div> def </div> ghi <div> moo </div>";
echo preg_replace_callback(
"#<div(.*?)>(.*? .*?)</div>#i",
"filter_nbsp",
$text);
function filter_nbsp($matches)
{
return "<div".$matches[1].">" . str_replace(" ","",$matches[2]) . "</div>";
}
这应该适用于关闭为</div>
,
输出
asd <div> def </div> ghi <div> moo </div>
答案 1 :(得分:1)
以下适合您的情况:
$str = "asd <div> def </div> ghi <div> moo </div>";
$res = preg_replace("%<div>(.*?) (.*?)</div>%", "<div>$1$2</div>", $str);
但要注意一些事实:
替换一次,因此div内的多个
不受影响。所以上述替代品根本不是一个好的解决方案。首先使用(XML)解析器函数找到div标签然后替换所有
更好。
答案 2 :(得分:0)
simple_html_dom
$html = str_get_html('asd <div> def </div> ghi <div> moo </div>');
foreach($html->find('div') as $element) {
$a = $element->plaintext;
$element->innertext = preg_replace('{\ }','',$a);
}
echo $html;