我试图从图像中删除一些属性,但它只删除了属性的名称,并保留其余的…
我有一个图像,如下所示:
<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;
}