我正在阅读HTML内容。有图像标签,如
<img onclick="document.location='http://abc.com'" src="http://a.com/e.jpg" onload="javascript:if(this.width>250) this.width=250">
或
<img src="http://a.com/e.jpg" onclick="document.location='http://abc.com'" onload="javascript:if(this.width>250) this.width=250" />
我尝试将此标记重新格式化为
<img src="http://a.com/e.jpg" />
但是我不成功。我到目前为止尝试构建的代码就像
$image=preg_replace('/<img(.*?)(\/)?>/','',$image);
任何人都可以提供帮助吗?
答案 0 :(得分:1)
这是一个使用DOMDocument的版本,它删除<img>
标记以外的所有属性,src
属性除外。请注意,使用DOMDocument执行loadHTML
和saveHTML
也可以更改其他html,尤其是在html格式不正确的情况下。所以要小心 - 测试并看看结果是否可以接受。
<?php
$html = <<<ENDHTML
<!doctype html>
<html><body>
<a href="#"><img onclick="..." src="http://a.com/e.jpg" onload="..."></a>
<div><p>
<img src="http://a.com/e.jpg" onclick="..." onload="..." />
</p></div>
</body></html>
ENDHTML;
$dom = new DOMDocument;
if (!$dom->loadHTML($html)) {
throw new Exception('could not load html');
}
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//img') as $img) {
// unfortunately, cannot removeAttribute() directly inside
// the loop, as this breaks the attributes iterator.
$remove = array();
foreach ($img->attributes as $attr) {
if (strcasecmp($attr->name, 'src') != 0) {
$remove[] = $attr->name;
}
}
foreach ($remove as $attr) {
$img->removeAttribute($attr);
}
}
echo $dom->saveHTML();
答案 1 :(得分:0)
一次匹配一个然后连接字符串,我不确定你正在使用哪种语言如此错误地解释伪:
1.Find <img with regex place match in a string variable
2.Find src="..." with src=".*?" place match in a string variable
3.Find the end /> with \/> place match in a string variable
4.Concat the variables together