繁体   English   中英

网址中的哪些字符导致file_get_contents / curl失败?

[英]Which characters in urls cause file_get_contents / curl to fail?

编辑说明:

我想知道url中的哪些字符导致file_get_contents / curl失败。

在下面的示例中,唯一引起问题的字符是空格,所以对我而言,最好的办法就是用%20替换str_replace url中的空格。 是否还有其他字符也会导致它失败? 如果是这样,它们是什么? 有替代我的功能吗?


原始短语:

我希望能够通过用户选择的URL下载任意文件,并以字符串形式访问它。 我最初的反应是:

$str = file_get_contents($url);

但是,这在以下URL上失败:

http://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35.JPG

接下来,我尝试了cURL

function file_get_contents_curl($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

但是,对于相同的URL,cURL失败,并显示“无效URL”。

我在这里阅读了许多问题,当从其中包含任意字符的URL下载时,必须使用urlencode。 但是,这导致:

http%3A%2F%2Fi.ebayimg.com%2Ft%2F2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-%2F00%2Fs%2FNjAwWDYwMA%3D%3D%2F%24%28KGrHqRHJDoE-PBe-SSLBPlrnIYb+Q%7E%7E60_35.JPG

我认为使用这两种方法都不会获取任何内容,因为现在它认为它是本地文件。 我需要做些什么才能获取任意网址?

尝试这个:

$url = "http://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(" . urlencode("KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35.JPG");

$str = file_get_contents($url);

编辑:正如Galen所说,URL的唯一问题是空格,可以使用str_replace进行修复,如下所示。

$url = "http://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35.JPG";
$url = str_replace(' ', '+', $url);
$str = file_get_contents($url);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM