RegEx替换HTML标记中的所有宽度和高度值

时间:2011-06-13 15:20:53

标签: php html 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='*')。

非常感谢!

2 个答案:

答案 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();