我正在尝试为preg_replace找到一个表达式,它删除图像的所有内联css样式。 例如,我有这样的文字:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. <img style="float:left; margin:0 0 10px 10px;" src="image.jpg" /> Proin vestibulum libero id nisl dignissim eu sodales.
我需要让它看起来像:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. <img src="image.jpg" /> Proin vestibulum libero id nisl dignissim eu sodales.
我尝试过几十个像
这样的表达式preg_replace("%<img(.*?)style(.*?)=(.*?)(\'|\")(.+?)(\'|\")(.*?)>%i", "<img\$1\$7>", $article->text)
但没有任何效果。有什么建议吗?
答案 0 :(得分:6)
preg_replace('/(\<img[^>]+)(style\=\"[^\"]+\")([^>]+)(>)/', '${1}${3}${4}', $article->text)
这可以帮助
答案 1 :(得分:3)
如评论所述,您应该使用dom解析器,PHP内置一个(在某些情况下为两个)名为DOMDocument。以下是您如何将它用于您的目的。
$x = new DOMDocument();
$x->loadHTMLFile("/path/to/html/file/or/file/outputtinghtml.html");
foreach($x->getElementsByTagName('img') as $img)
{
$img->removeAttribute('style');
}
$x->saveHTMLFile("/file/used/in/loadHTMLFile/function.html");
答案 2 :(得分:1)
你的模式过于宽松。由于.
可以匹配任何内容,style(.*?)=(.*?)
会继续尝试匹配,直到它遇到包含=符号的内容,包括您不想要的各种内容。您也没有使用g
或m
标记,我非常确定您要使用这些标记。
尝试这样的事情:
preg_replace("/<img\s([^>]*)style\s*=\s*('|\").*?\2([^>]*)>/igm", "<img $1 $3>", $article->text)
请注意('|")...\2
,其中包含style="foo 'bar'"
等代码。这在style
代码中非常有用。
答案 3 :(得分:0)
这样的事情怎么样?
preg_replace('/<img style="[^"]*"/', '<img ', $article->text);