Emi*_*mil 1 html php regex dom
我从另一篇文章中获得了这个RegEx,但它没有完全像它应该的功能.
这是模式:/(<[^>]+ (height|width)=)"[^"]*"/gi和替换:$1"auto"
这是一个典型的替换字符串:
<p width="123" height="345"></p>
现在,我希望这会返回<p width="auto" height="auto"></p>,但它会返回<p width="123" height="auto"></p>.
你能帮我弄清楚如何替换HTML标签中的宽度和高度值吗?哦,我真的希望它也适用于小的叛逆迹象(例如width='*').
非常感谢!
不要用正则表达式这样做.使用DOM代替 - 它不是很难:
$dom = new DOMDocument;
$dom->loadHTML($yourHTML);
$xpath = new DOMXPath($dom);
$widthelements = $xpath->query('//*[@width]'); // get any elements with a width attribute
foreach ($widthelements as $el) {
$el->setAttribute('width', 'auto');
}
$heightelements = $xpath->query('//*[@height]'); // get any elements with a height attribute
foreach ($heightelements as $el) {
$el->setAttribute('height', 'auto');
}
$yourHTML = $dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)
简单地删除属性可能更好 - 如果是,则执行$el->removeAttribute('width');或类似操作height.