PHP preg_replace:删除 style=".."来自 img 标签

发布于 2024-11-26 18:35:04 字数 648 浏览 0 评论 0 原文

我正在尝试找到 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)

但没有任何效果。有什么建议吗?

I'm trying to find an expression for preg_replace, that deletes all inline css styles for images.
For example, I have this text:

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.

And I need to make it look like:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. <img src="image.jpg" /> Proin vestibulum libero id nisl dignissim eu sodales.

I have tried dozens of expressions like

preg_replace("%<img(.*?)style(.*?)=(.*?)(\'|\")(.+?)(\'|\")(.*?)>%i", "<img\$1\$7>", $article->text)

but nothing worked. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

野心澎湃 2024-12-03 18:35:04
preg_replace('/(\<img[^>]+)(style\=\"[^\"]+\")([^>]+)(>)/', '${1}${3}${4}', $article->text)

这可以帮助

preg_replace('/(\<img[^>]+)(style\=\"[^\"]+\")([^>]+)(>)/', '${1}${3}${4}', $article->text)

this could help

林空鹿饮溪 2024-12-03 18:35:04

正如所评论的,您应该使用 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");

As was commented you should use a dom parser, PHP has one built in (two in some cases) called DOMDocument. Here is how you could use it for your purpose.

$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");
秋凉 2024-12-03 18:35:04

你的模式太宽松了。由于 . 可以匹配任何内容,因此 style(.*?)=(.*?) 将继续尝试匹配,直到遇到带有 = 符号的内容,包括各种你不想要的东西。您也没有使用 gm 标志,我很确定您想使用它们。

尝试这样的操作:

preg_replace("/<img\s([^>]*)style\s*=\s*('|\").*?\2([^>]*)>/igm", "<img $1 $3>", $article->text)

注意 ('|")...\2,它允许像 style="foo 'bar'" 这样的代码。这在style 标签。

Your pattern is too permissive. Since . could match anything, style(.*?)=(.*?) will go on trying to match until it hits something with a = sign in it, including all sorts of stuff you don't want. You also aren't using the g or m flags, which I'm pretty sure you want to use.

Try something like this:

preg_replace("/<img\s([^>]*)style\s*=\s*('|\").*?\2([^>]*)>/igm", "<img $1 $3>", $article->text)

Note the ('|")...\2, which allows code like style="foo 'bar'". This is quite possible in style tags.

哆兒滾 2024-12-03 18:35:04

像这样的事情怎么办?

preg_replace('/<img style="[^"]*"/', '<img ', $article->text);

What about something like this?

preg_replace('/<img style="[^"]*"/', '<img ', $article->text);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文