我有一个在<img>
中包含<div>
个标签的功能。通常这些可以出现在<p>
标签中(由于一个所见即所得的编辑器)。
$doc->loadHtml($str);
$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
$div = $doc->createElement('div');
$tag->parentNode->insertBefore($div, $tag);
$div->appendChild($tag);
}
我想更改我的功能,以便如果有一个打开的<p>
标记,它会在开始</p>
之前附加一个结束<div>
标记,然后添加一个开头{{1在结束<p>
之后。
目前输入时
</div>
我的输出是
'<p>blah blah <img src="incorrect.gif"> blah blah</p>
我希望输出
'<p>blah blah <div><img src="incorrect.gif"></div> blah blah</p>
答案 0 :(得分:0)
我想到了两种方法:
<div>...</div>
包装图片,而是用</p><div>...</div><p>
</p>...<p>
如果您确定在图像周围使用的包装总是 <div>...</div>
对,您可以考虑使用正则表达式进行简单替换:
<强> PHP 强>
$html = preg_replace_all('/<div[^>]*>(.*?)</div>/i', '</p>$1<p>', $html)
如果在包装div
元素中包含属性,这也将起作用。但是,如果您打算开始使用正则表达式对HTML进行更复杂的操作,请参阅以前的帖子,详细说明为什么这是一个坏主意:
答案 1 :(得分:0)
您可以使用 preg_replace 功能来实现此目的。
$html ='<p>blah blah <div><img src="incorrect.gif"></div> blah blah</p>';
echo preg_replace("/<p>(.*?)<div>(.*?)<\/div>(.*?)<\/p>/", "<p>$1</p><div>$2</div><p>$3</p>", $html);
我已经测试了几个案例,但是使用其他人进行了检查