drnxnbf199049 2018-01-29 23:15 采纳率: 100%
浏览 183

setAttribute被忽略了,为什么?

The intention of this code is that an the HTML-attribute 'data-original-src' is added to the img-tag, in case of unsecure http:// URL's. But this attribute is not generated.

What's wrong, and what mistake do I overlook? Anyway, the str_replace() is working like a charm.

public function parse($string) {
    if($this->settings['camo_enabled'] == true) {
        $doc = new DOMDocument();
        $doc->loadHTML($string);
        $images = $doc->getElementsByTagName('img');
        //$imgarray = array();
        foreach ($images as $image) {
            $url = $image->getAttribute('src');
            if(substr($url, 0, 8) != 'https://') {
                $image->setAttribute('data-original-src', $url);
                $camo = $this->proxy_url($url);
                $string = str_replace($image->getAttribute('src'), $camo, $string);
                unset($url, $camo);
            }
        }
    }
    return $string;
}
  • 写回答

1条回答 默认 最新

  • doubinei1457 2018-01-29 23:30
    关注

    I think that the problem arises from the fact that you are forgetting to modify the $string variable you pass to the method calling saveHTML() before returning it. Commit your changes as follows:

    public function parse($string)
    {
        if ($this->settings['camo_enabled'] == true)
        {
            $doc = new DOMDocument();
            $doc->loadHTML($string);
            $images = $doc->getElementsByTagName('img');
    
            foreach ($images as $image)
            {
                $url = $image->getAttribute('src');
    
                if (substr($url, 0, 8) != 'https://')
                {
                    $image->setAttribute('data-original-src', $url);
                    $camo = $this->proxy_url($url);
                    $string = str_replace($image->getAttribute('src'), $camo, $string);
                    unset($url, $camo);
                }
            }
        }
    
        $string = $doc->saveHTML(); 
        return $string;
    
        // The two lines above can also be simply rewritten as:
        // return $doc->saveHTML();
    }
    

    For more information, refer to the official documentation.

    On a side note, since you are performing changes in both the $string variable and in the parsed HTML file, stick to the latter by modifying this line:

    $string = str_replace($image->getAttribute('src'), $camo, $string);
    

    into:

    $image->setAttribute('src', $camo);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。