如何使用URL中的unicode字母通过HTTP下载图像?

时间:2013-02-19 13:10:33

标签: php http curl download

如何使用PHP下载以下网址(图片):http://www.delo.si/assets/media/picture/20121228/POLITIČNI05 tomi lombar.jpg?rev=2

问题是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);

“不起作用”意味着: 我的意思是“不起作用的是我下载的图片不同于我在浏览器中粘贴URL时获得的图片。这个网站显然设置了后备图片,所以如果图片不存在,你得到了默认的。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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));