1

我正在阅读 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);

有人可以帮忙吗?

4

2 回答 2

1

<img>这是一个使用 DOMDocument 的版本,它从标签中删除除属性之外的所有src属性。请注意,使用 DOMDocument 执行loadHTMLsaveHTML操作也可以更改其他 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();
于 2013-07-24T12:15:06.073 回答
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
于 2013-07-24T11:12:29.943 回答