2013-02-19 43 views
2

如何使用PHP下載以下URL(圖片):http://www.delo.si/assets/media/picture/20121228/POLITIČNI05 tomi lombar.jpg?rev=2如何使用URL中的unicode字母通過HTTP下載圖像?

問題是PHP以某種方式不支持URL中的unicode字母(請參閱那裏的Č字母?)。我試過使用file_get_contents和cURL,都沒有工作。貝婁是我的非工作代碼。

file_get_contents

$url = "http://www.delo.si/assets/media/picture/20121228/POLITIČNI05 tomi lombar.jpg?rev=2"; 
$stream_context = array('http' => array( 
    'method'=>"GET", 
    'header'=>"Content-Type: text/html; charset=utf-8" 
)); 
$image_contents = file_get_contents($url, false, stream_context_create($stream_context)); 
file_put_contents("image.jpg", $image_contents); 

捲曲:

$url = "http://www.delo.si/assets/media/picture/20121228/POLITIČNI05 tomi lombar.jpg?rev=2"; 
$ch = curl_init($url); 
$fp = fopen('image.jpg', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/html; charset=utf-8")); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

什麼 「不工作」 是指: 我的意思與「不工作的是我如果我在我的瀏覽器中粘貼網址,會得到與我獲得的圖片不同的圖片。該網站顯然設置了一個後備圖片,所以如果圖片不存在,你會得到默認的圖片。

+2

您是否嘗試過使用'urlencode'在該URL將其發送到服務器之前? – vectorialpx 2013-02-19 13:17:45

+0

@vectorialpx:你可能想要真正回答問題,或者其他人正在幫助你爲你做。 – Jon 2013-02-19 13:21:11

回答

2

您應該可以在圖像名稱周圍使用urlencode()。所以:

header('Content-type: image/jpg'); 
$img = 'http://www.delo.si/assets/media/picture/20121228/' . rawurlencode('POLITIČNI05 tomi lombar').'.jpg?rev=2'; 
readfile($img); 
+0

這不起作用。如果你認爲它應該,嘗試它並粘貼代碼。 – 2013-02-19 14:28:03

+0

這是因爲URL中的空格。 urlencode()將空格更改爲'+' - 我將它換成了rawurlencode(),這樣做的工作:) – juco 2013-02-19 16:31:43

0

您可以使用函數utf8_encode爲引用Unicode字符

$url = "http://www.delo.si/assets/media/picture/20121228/POLITIČNI05 tomi lombar.jpg?rev=2"; 

$url = utf8_encode(str_replace(' ','%20',$url)); 
相關問題