PHP preg_replace:删除 style=".."来自 img 标签
我正在尝试找到 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)
但没有任何效果。有什么建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这可以帮助
this could help
正如所评论的,您应该使用 dom 解析器,PHP 有一个内置的(在某些情况下有两个)名为 DOMDocument 的解析器。以下是您如何使用它来达到您的目的。
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.
你的模式太宽松了。由于
.
可以匹配任何内容,因此style(.*?)=(.*?)
将继续尝试匹配,直到遇到带有 = 符号的内容,包括各种你不想要的东西。您也没有使用g
或m
标志,我很确定您想使用它们。尝试这样的操作:
注意
('|")...\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 theg
orm
flags, which I'm pretty sure you want to use.Try something like this:
Note the
('|")...\2
, which allows code likestyle="foo 'bar'"
. This is quite possible instyle
tags.像这样的事情怎么办?
What about something like this?