【问题标题】:PHP Simple HTML DOM can't read "data-src" or "img src" without http: in pathPHP Simple HTML DOM 无法在没有 http: 的情况下读取“data-src”或“img src”
【发布时间】:2014-05-27 13:12:00
【问题描述】:

我正在使用 PHP Simple HTML DOM,但发现它无法从 data-src 属性或 <img src 中读取图像,如果没有 http: 例如; <img src="//static.mysite.com/123.jpg">

有什么方法可以实现吗?

我的代码是:

if($htm->find('img')){
foreach($htm->find('img') as $element) {
        $raw = file_get_contents_curl($element->src);
        $im = @imagecreatefromstring($raw);
        $width = @imagesx($im);
        $height = @imagesy($im);
        if($width>500&&$height>=350){
    $hasimg = '1';
        echo '<img src=\'' .$element->src. '\'>';
        }

} // end foreach
} // end if htm

【问题讨论】:

  • 如果指定http有什么问题?
  • 其实问题出在哪里http:不见了。
  • 如果站点没有http 没有响应,则在foreach 循环中手动编写
  • 尝试在file_get_contents_curl(...); 之后添加die();var_dump($raw); 并验证该功能是否正常工作。我猜你没有得到任何错误,因为所有的错误抑制操作符。
  • 它不是站点 URL,它关于远程 URL 上的 img 路径中​​的 http:

标签: php


【解决方案1】:

如果您使用file_get_contents_curl() 作为您在代码中定义的函数,例如this question 中的函数,您需要设置用于 cURL 的默认协议:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);

这样,如果图像src 属性具有协议相对URL,cURL 将只使用HTTP。

【讨论】:

  • 是的,我正在使用file_get_contents_curl()。我添加了上面的行。它没有解决它。
【解决方案2】:

省略协议 (http/https) 称为“网络路径引用”,表示应使用嵌入 URL 的页面的协议。这对 file_get_contents() 或 curl 没有意义,因为它们不知道任何页面。

长话短说,您必须自己添加协议。

试试这个:

$url=$element->src;
if (substr($url, 0, 2)=='//') $url='http:'.$url;
$raw=file_get_contents_curl($url);

【讨论】:

  • 小故事,你没看懂问题:D
  • 您的问题是“有什么方法可以做到这一点”。实现这一目标的唯一方法是自己添加 http 或 https。我没听懂哪一部分?
  • 我从您的回答中得到的是将http 添加到已被使用的源网址。功能没有做的是,无法从提供的 html 内容中提取图像的 url(从 data-src 标记或图像路径中没有 http 的 img 标记)。例如&lt;img data-src="//static.zara.net/photos//2014/V/0/1/p/4806/029/406/2/w/1024/4806029406_9_1_1.jpg" src="//static.zara.net/photos//2014/V/0/1/p/4806/029/406/2/w/1024/4806029406_9_1_1.jpg"&gt;
  • 我认为从 HTML 内容中提取 URL 效果很好。问题是 file_get_contents_curl() 不能理解前面没有 http: 的 URL。
  • 是的 Wolfgang Stengel 明白了。另外我试过file_get_contents_curl($element-&gt;data-src);它也没有用
【解决方案3】:

它对我有用:

$doc = str_get_html('<img data-src="foo">');
echo $doc->find('img', 0)->getAttribute('data-src');
//=> outputs: foo

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2012-04-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多