如何使用preg_replace将表宽度更改为100%

时间:2013-04-07 20:08:03

标签: php regex preg-replace

如果以像素为单位定义宽度值,我想将table宽度更改为100%

我的意思是如果表格宽度看起来像width="500"width="500px",那么我想用100%替换它。

我的意思是这样width="100%"

有人可以帮助我使用preg_replace。

$content = 'holds all my html content';
$replace = '100%';
preg_replace($pattern,$replace,$content,-1);

有人可以帮助我$pattern吗?

2 个答案:

答案 0 :(得分:3)

$string = '<table width=" 600 px "></table>' ;
$pattern = '/width=["\']\s*\d+\s*(px|%)\s*["\']/' ;
$own_style = 'width="100%"' ;
$new = preg_replace($pattern, $own_style, $string) ;

这可以帮助您,但是如果您的HTML内容中没有更多宽度属性。 否则,如果任何其他元素具有属性,则其width将设置为100%

因此,通常使用REGEXP来处理HTML是一种不好的做法。

您应该使用DOMhttp://php.net/manual/en/book.dom.php

答案 1 :(得分:1)

我建议不要使用preg_replace,并举例说明使用DOM

$dom = new DOMDocument();
$dom->loadHTML($content);

foreach ($dom->getElementsByTagName('table') as $item) {
    if(strpos($item->getAttribute('width'), '%') === false) {
        $item->setAttribute('width', '100%');
    }
}
$content = $dom->saveHTML();

如果要将所有table替换为宽度为100%,请删除if子句。目前,它会进行检查以确保width不是基于百分比的。

修改

如果您不想要格式良好的HTML,您可以通过更改以下内容来获取没有body标签的正文内容:

$content = $dom->saveHTML();

要:

$content = substr($dom->saveXml($body->item(0)), 6, -7);

所以,如果你有

$content = '<table width="600px"><td>Stuff</td></table><table width="50%"><td>Stuff</td></table>';

你最终会得到:

<table width="100%"><td>Stuff</td></table><table width="50%"><td>Stuff</td></table>