【问题标题】:php replace all src atributes of img in filephp替换文件中img的所有src属性
【发布时间】:2013-12-06 01:53:13
【问题描述】:

我有这样的页面链接:

import.html

<h1>Title</h1>
<img src="img/pic1.jpg" alt="" title="Picture 1" class="pic">
<img src="img/pic2.jpg" alt="" title="Picture 2" class="pic">
<img src="img/pic3.jpg" alt="" title="Picture 3" class="pic">
<p>random text</p>
<img src="img/pic4.jpg" alt="" title="Picture 4" class="pic">

index.php

<?php
//get file content
$html = file_get_contents('import.html');

function replace_img_src($img_tag) {
    $doc = new DOMDocument();
    $doc->loadHTML($img_tag);
    $tags = $doc->getElementsByTagName('img');
    if (count($tags) > 0) {
        $tag = $tags->item(0);
        $old_src = $tag->getAttribute('src');
        $new_src_url = 'website.com/assets/'.$old_src;
        $tag->setAttribute('src', $new_src_url);
        return $doc->saveHTML($tag);
    }
    return false;
}

// usage
$new = replace_img_src($html);
print_r(htmlspecialchars($new));

目标:

我想用新的图片链接替换 ​​import.html 文件和 return fileimg 元素的 all src 属性.我设法创建替换一个元素。

如何编辑它以遍历整个文件并替换所有属性并return new import.html 替换为src's?

【问题讨论】:

  • 通常你应该在获取元素后使用 foreach 循环并将其保存在 $tags 变量中。像 foreach($tags as $tag) 之类的东西。但我不确定 $tags 变量中有什么。当你运行代码时你看到了什么 var_dump($tags); ?

标签: php html dom


【解决方案1】:

您可以遍历所有标签并替换它们。未测试!

$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
       $old_src = $tag->getAttribute('src');
        $new_src_url = 'website.com/assets/'.$old_src;
        $tag->setAttribute('src', $new_src_url);
        $doc->saveHTML($tag);
}

【讨论】:

    【解决方案2】:

    getElementsByTagName() 方法将返回一个包含所有匹配元素的DOMNodeList 对象。目前,您只修改了一个img 标签。要替换所有img 标签,只需使用foreach 循环遍历它们:

    function replace_img_src($img_tag) {
        $doc = new DOMDocument();
        $doc->loadHTML($img_tag);
        $tags = $doc->getElementsByTagName('img');
        foreach ($tags as $tag) {
            $old_src = $tag->getAttribute('src');
            $new_src_url = 'website.com/assets/'.$old_src;
            $tag->setAttribute('src', $new_src_url);
        }
        return $doc->saveHTML();
    }
    

    【讨论】:

    • 我得到了Fatal error: Call to undefined method DOMElement::item()在线$tag = $tag_node-&gt;item(0);
    • 所以它会返回新的$html,其中所有srcimg 的内容都被替换了?
    • @Ing.MichalHudak:是的,(现在)会的。查看更新的答案。
    【解决方案3】:
    foreach ($tags as $tag)
    {
            $old_src = $tag->getAttribute('src');
            $new_src_url = 'website.com/assets/'.$old_src;
            $tag->setAttribute('src', $new_src_url);
    }
    

    【讨论】:

      【解决方案4】:

      使用 foreach 循环遍历所有元素。

      function replace_img_src($img_tag) {
          $doc = new DOMDocument();
          $doc->loadHTML($img_tag);
          $tags = $doc->getElementsByTagName('img');
          foreach($tags as $tag){
              $old_src = $tag->getAttribute('src');
              $new_src_url = 'website.com/assets/'.$old_src;
              $tag->setAttribute('src', $new_src_url);
          }
      
          return $doc->saveHTML();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        • 2011-11-19
        • 2018-11-12
        • 2016-06-03
        相关资源
        最近更新 更多