我从另一篇文章中获得了这个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='*'
)。
非常感谢!
答案 0 :(得分:9)
请勿使用正则表达式执行此操作。使用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();
最好只删除属性 - 如果是,请执行$el->removeAttribute('width');
或height
上的类似操作。
答案 1 :(得分:3)
请使用an HTML parser而不是正则表达式。请?
$input = '<p width="123" height="345"></p>';
$doc = DOMDocument->loadHTML($input);
// ... make changes ...
$output = $doc->saveHTML();