2012-09-09 101 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