【问题标题】:Find all <img> tags and change style attribute查找所有 <img> 标签并更改样式属性
【发布时间】:2013-04-05 15:34:40
【问题描述】:

我正在尝试找到一种从字符串中获取标记并删除样式属性的方法。 之后我想添加我自己的风格并保留以下文字.. 例如,我有:

<p><img alt="" src="images/epsth/arismagnisiakos.jpg" style="width: 600px; height: 405px;" /></p><p>&nbsp;</p><p>

结束最终结果应该是:

<p><img alt="" src="images/epsth/arismagnisiakos.jpg" style="width: 100%;" /></p><p>&nbsp;</p><p>

我没有成功尝试过正则表达式,但似乎我太笨了,无法理解它的功能......

我们将不胜感激! 来自希腊的问候 吉姆

【问题讨论】:

  • 不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php

标签: php regex html-parsing


【解决方案1】:

你可以像这样通过正则表达式来做到这一点:

$str = '<p><img alt="" src="images/epsth/arismagnisiakos.jpg" style="width: 600px; height: 405px;" /></p><p>&nbsp;</p><p>';

$newStr = preg_replace('#<img (.+) style="(.+)" />#isU', '<img $1 style="width: 100%" />', $str);

【讨论】:

  • 非常感谢您,很抱歉我的回复晚了...非常有帮助且易于理解...继续加油!
【解决方案2】:

要删除高度或其他一些属性:

$string = '<p><img alt="" src="images/epsth/arismagnisiakos.jpg" style="width: 600px; height: 405px;" /></p><p>&nbsp;</p><p' ;
$pattern = "/height:\s*\d*\s*(px|%);*/" ;
$new = preg_replace($pattern,"", $string) ;

echo htmlentities($new) ;

或者删除所有样式的东西并替换为自己的:

$string = '<p><img alt="" src="images/epsth/arismagnisiakos.jpg" style="width: 600px; height: 405px;" /></p><p>&nbsp;</p><p' ;
$pattern = "/style=[\'\"][^\"|^\']*[\'\"]/" ;
$own_style = "style='width: 50%'" ;
$new = preg_replace($pattern, $own_style, $string) ;

echo htmlentities($new) ;

通常在 HTML 标签上使用RegExp 有点不好,应该避免,但在某些情况下可能适用。

【讨论】:

  • 对不起,我的回复晚了...您的回答非常有帮助,我在另一个问题中使用了它。对不起,我不能对两个答案都投票...我知道不应该使用它,但我不得不更新包含这些标签的数据库并在 6000 个条目中这样做似乎是一种单向解决方案......完成工作并了解更多关于正则表达式的知识!感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多