【问题标题】:Dynamically replace the "src" attributes of all <img> tags动态替换所有 <img> 标签的“src”属性
【发布时间】:2010-09-27 22:07:39
【问题描述】:

我有一些 HTML,想替换所有 img 标签的“src”属性,以便它们指向另一台主机上相同图像(尽管文件名不同)的副本。

例如,给定这三个标签

<IMG SRC="../graphics/pumpkin.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="redball.gif" ALT="*"> 
<img alt="cool image" src="http://www.crunch.com/pic.jpg"/>

我希望将它们替换为

<IMG SRC="http://myhost.com/cache/img001.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="http://myhost.com/cache/img002.gif" ALT="*"> 
<img alt="cool image" src="http://myhost.com/cache/img003.jpg"/>

我知道这有一些正则表达式的魔力,只是不确定它应该是什么样子(或者这实际上是不是最好的方法)。

【问题讨论】:

标签: php regex


【解决方案1】:

我试过用 SimpleHTMLDOM 做这个,它似乎工作:

$html = str_get_html( ... ); // what you have done

$map = array(
  "../graphics/pumpkin.gif"       => "http://myhost.com/cache/img001.gif",
  "redball.gif"                   => "http://myhost.com/cache/img002.gif",
  "http://www.crunch.com/pic.jpg" => "http://myhost.com/cache/img003.gif",
);

foreach ($html->find("img") as $element) {
  if (isset($map[$element->src])) {
    $element->src = $map[$element->src];
  }
}

echo $html;

PS:如果你需要澄清你的问题,你应该编辑你原来的问题,而不是打开一个新的identical question

【讨论】:

  • 比尔,它工作得很好。非常感谢。是的,你是对的。我其实只是想关闭这个问题并开始一个新的问题,而不使用“HTML”和“regex”的非常危险的单词组合,但后来我发现我无法关闭这个问题。那好吧。再次感谢。
【解决方案2】:

在 SO 上被问到这个问题,您很可能会得到很多答案,告诉您改用解析器。猜猜看,我认为这是正确的答案。在 PHP 中,您可以使用 DOMDocument 的 loadHTML 方法从给定的 HTML 文档创建一个 DOM 树,您可以遍历该树,并在进行过程中修改标签。

【讨论】:

  • 更有可能获得对现在强制性he comes的参考
  • @David Nah,这不是 HTML 解析,它只是纯文本解析。
  • @Roger,也许有这种可取之处。
  • 考虑到他有一个想要解析的 HTML 文档,这怎么不是 HTML 解析。
  • 因为他正在做的,不是使用 RegEx 将文本转换为 HTML dom。他不关心处理封闭或非封闭标签,或嵌套,或者实际上除了
【解决方案3】:

您将需要不区分大小写的 RegEx 匹配,并且您还需要考虑 " vs ' 引号。

嗯。我想我会使用 System.Text.RegularExpressions.RegEx.Replace 和委托调用。

您需要确保报价匹配,因此您需要 ORed 检查。大致:

\<IMG .* src\=\'.*?\' | \<IMG .* src\=\".*?\"

【讨论】:

    【解决方案4】:

    使用 jquery,您可以这样获取所有图像:

    $("img").each(函数(
    if($this.attr('src') == "../graphics/pumpkin.gif"){
    $this.attr('src', 'http://myhost.com/cache/img001.gif');
    }否则如果...
    ))

    【讨论】:

      【解决方案5】:

      只需遍历文档中的所有图像并获取/设置 src 属性。

      var images=document.getElementByTagName('img');
      for(var i=0;i

      正如许多人已经说过的那样,您不需要 RegExp。

      【讨论】:

        【解决方案6】:

        您可以使用phpQuery 来执行此操作。

        foreach (pq("img") as $img) {
          // insert regexp magic here
          $img->attr('src', $newurl);
        }
        

        很可能是矫枉过正,但它确实有效。特别是对于习惯使用 jQuery 的人。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-19
          • 2023-03-09
          • 2013-12-06
          • 2012-01-12
          • 1970-01-01
          • 2013-05-26
          • 1970-01-01
          • 2014-03-12
          相关资源
          最近更新 更多