删除图像链接中的其他内容,但保留src


Remove everything else from an image link but keep src

我试图从图像中删除一些属性,但它只删除了属性的名称,并保留其余的…

我有一个图像,如下所示:

<img class="aligncenter size-full wp-image-sd174" src="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg" alt="alt title" srcset="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 700w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 241w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 624w" sizes="(max-width: 700px) 100vw, 700px" height="870" width="700">

我想删除除<img src="image path">以外的所有内容

我尝试了下面的代码,但它只删除了属性的名称。例如:srcset.

$html = "<img class="aligncenter size-full wp-image-sd174" src="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg" alt="alt title" srcset="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 700w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 241w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 624w" sizes="(max-width: 700px) 100vw, 700px" height="870" width="700">";
$one = preg_replace('#(<img.+?)srcset=(["'']?)'d*'2(.*?/?>)#i', '$1$3', $html);
$two= preg_replace('#(<img.+?)sizes=(["'']?)'d*'2(.*?/?>)#i', '$1$3', $one);

试试这个:

$html = preg_replace("/(<img''s)[^>]*(src=''S+)[^>]*(''/?>)/i", "$1$2$3", $html);

它不替换不需要的属性,它通过图像标签的打开和关闭提取src属性。

它应该适用于任何数量的<img>标签在你的html

我建议您采用以下方法。

考虑到每个属性都必须用空格分隔,您可以使用简单的explosion()函数拆分所有属性,然后迭代获得所需的属性并创建干净的图像标签。

function cleanImage($html) {
    $output = '';
    $image_components = explode(' ',$html);
    foreach($image_components as $component) {
        if(substr($component,0,4) == 'src=') {
            $output = '<img '.$component.">";
            break;
        }
    }
    return $output;
}

$html = '<img class="aligncenter size-full wp-image-sd174" src="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg" alt="alt title" srcset="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 700w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 241w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 624w" sizes="(max-width: 700px) 100vw, 700px" height="870" width="700">';
$image = cleanImage($html);

您可以使用DOM扩展来正确操作HTML结构。

在非常简单的情况下使用正则表达式可能是好的,但无论它看起来多么复杂,它都不是一个完整的解决方案。


剥离除src以外的所有<img>属性:

$html = '<img class="aligncenter size-full wp-image-sd174" src="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg" alt="alt title" srcset="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 700w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 241w, http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg 624w" sizes="(max-width: 700px) 100vw, 700px" height="870" width="700">';
echo stripImageAttributes($html);
输出:

<img src="http://www.blahblah.com/wp-content/uploads/2016/06/07d333r.jpg">

stripImageAttributes()定义:

(它被设计用来处理HTML片段,而不是完整的文档。)

/** 
 * @param string $html
 * @return string 
 */ 
function stripImageAttributes($html)
{
    // init document
    $doc = new DOMDocument();
    $doc->loadHTML('<!doctype html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>' . $html . '</body></html>');
    // init xpath
    $xpath = new DOMXPath($doc);
    // process images
    $body = $xpath->query('/html/body')->item(0);
    foreach ($xpath->query('//img', $body) as $image) {
        $toRemove = null;
        foreach ($image->attributes as $attr) {
            if ('src' !== $attr->name) {
                $toRemove[] = $attr;
            }
        }
        if ($toRemove) {
            foreach ($toRemove as $attr) {
                $image->removeAttribute($attr->name);
            }
        }
    }
    // convert the document back to a HTML string
    $html = '';
    foreach ($body->childNodes as $node) {
        $html .= $doc->saveHTML($node);
    }
    return $html;
}