提问者:小点点

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


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

在下面的例子中,唯一引起问题的字符是空格,所以对我来说最好的办法就是在url中用str_replace空格。还有其他字符也导致它失败吗?如果有,它们是什么?有没有一个函数可以代替我?

原始短语:

我希望能够通过用户选择的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://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35。JPG

我认为,这两种方法都不能获取数据,因为现在它认为这是一个本地文件。我需要做什么才能获取任意url?


共1个答案

匿名用户

试试这个:

$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);