3

我想将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吗?

4

2 回答 2

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 内容中没有更多的宽度属性。否则,如果任何其他元素具有 with 属性,它们width将被设置为100%

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

你应该使用DOM: http: //php.net/manual/en/book.dom.php

于 2013-04-07T20:16:28.393 回答
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的 's 替换为具有 的宽度100%,请删除该if子句。目前,它会检查以确保width不是基于百分比的。

编辑

以防万一您不想要格式良好的 HTML,您可以通过更改获得不带正文标签的正文内容:

$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>
于 2013-04-07T22:18:47.353 回答