2012-09-09 73 views
3

当我使用curl库并尝试从url获取图像时,我得到了400个错误的请求错误。 我发现这个问题是与编码url。 但在我的情况下,它不能正常工作,因为我的网址 - 这是路径上的服务器端图像 - 像Curl返回400个不好的请求(带空格的url)

http://example.com/images/products/product 1.jpg 

据我所知,在名用户空间文件是不好的做法,但它不是我的服务器和我创建这些文件。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, urlencode($url)); 
echo $ret = curl_exec($ch); 

当我用用urlencode功能 - 卷曲返回HTTP_CODE = 0

更新

$url = str_replace(' ', '+', $url); 

无法正常工作,服务器返回404错误。

+2

就是这样一个可能的URL(带空格)。当我们在网址 – diEcho

+1

@diEcho中键入空格时,空格变成了'%20'什么?当然这是可能的。它本身不会变成%20 - 有些客户可以做到这一点,但当然不是全部,而且总是不可能的。 – eis

回答

11

这是否可能工作?

$url = 'http://host/a b.img'; 
$url = str_replace(" ", '%20', $url); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
echo $ret = curl_exec($ch); 
+0

您的变体作品,谢谢。 – yAnTar

0

您不能对整个字符串进行urlencode编码,因为它会编码斜杠和其他需要保持未编码的斜线。如果空格是你唯一的问题,这将做到:

str_replace(' ', '+', $url); 
+0

此变体不起作用,服务器返回404错误。 – yAnTar

+0

@yAnTar'str_replace'后的结果URL是什么? –

+0

我会发布真正的url,但在stackoverflow解析器剪切符号。我只贴名 真正的文件名 - 米哈尔Dziekan 016大拇指600x791-188072.jpg 更换后 - 米哈尔+ Dziekan + 016-拇指600x791-188072.jpg – yAnTar

1

您需要使用rawurlencode()功能:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, rawurlencode($url)); 
echo $ret = curl_exec($ch); 

rawurlencode()必须始终首选。 urlencode()仅供遗留使用。详情请看this SO answer