[英]Closing and opening <p> tags
我有一个将<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>
标记,它会在该打开的<div>
之前附加一个结束</p>
标记,然后在结束</div>
之后添加一个开头<p>
</div>
。
当前何时输入
'<p>blah blah <img src="incorrect.gif"> blah blah</p>
我的输出是
'<p>blah blah <div><img src="incorrect.gif"></div> blah blah</p>
我希望输出是
'<p>blah blah </p><div><img src="correct.gif"></div><p> blah blah</p>
我想到两种方法:
<div>...</div>
包装图像,而是用</p><div>...</div><p>
包装图像 </p>...<p>
包装 如果确定在图像周围使用的换行符始终是<div>...</div>
对,则可以考虑使用regex进行简单替换:
PHP
$html = preg_replace_all('/<div[^>]*>(.*?)</div>/i', '</p>$1<p>', $html)
如果在包装div
元素中包含属性,这也将起作用。 但是,如果您打算开始将regex用于HTML上的更复杂的操作,则以下是上一篇文章,其中详细介绍了为什么这样做不是一个好主意:
您可以使用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);
我已经测试了几种情况,尽管使用其他几个进行了检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.