PHP简单HTML DOM可以';t读取“t”;数据src”;或“;img src";路径中没有http:


PHP Simple HTML DOM can't read "data-src" or "img src" without http: in path

我正在使用PHP Simple HTML DOM,刚刚发现如果没有http:eg,它就无法从data-src属性或<img src读取图像;<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

它对我有效:

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

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

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);

这样,如果图像src属性具有与协议相关的URL,cURL将仅使用HTTP。

省略协议(http/https)被称为"网络路径引用",意味着应该使用URL嵌入的页面的协议。这对file_get_contents()或curl来说毫无意义,因为它们不知道任何页面。

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

试试这个:

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