PHP如何仅在img标记中从HTML标记中删除样式属性?

时间:2016-11-23 08:15:30

标签: php regex

我通常使用此代码来从HTML标记中删除样式属性。

$output = preg_replace('/(<[^>]+) style=".*?"/i', '$1', $input);

但是,现在我只想在IMG标记中删除HTML标记中的样式属性。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果必须在PHP中操作HTML,则使用DOM解析器会更安全。例如,以下是一些基于DOMDocument / DOMXPath的代码,以获取具有img属性的所有style标记,并仅删除这些属性:

$html = <<<DATA
<body>
<span style="new">Don't modify it</span>
<span style="old">Don't modify it</span>
<img style="Remove-me" src="img.jpg">
<img src="img.jpg" title="Don't modify it">
</body>
DATA;

// Initializing the DOM tree with an HTML string above
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$xpath = new DOMXPath($dom);
$imgs = $xpath->query('//img[@style]'); // Fetch all img tags having style attribute

foreach($imgs as $img) { 
   $img->removeAttribute('style'); // Remove the style attribute
}

echo $dom->saveHTML(); // Show the modified HTML

请参阅PHP demo

答案 1 :(得分:0)

你应该反过来做。将样式捕获为第一组,并将其替换为空。

$output = preg_replace('/<\s*img[^<>]+?(style\s*=\s*[\'\"][^\'\"]+[\'\"])/i', '', $input);