【问题标题】:How can I download an image over HTTP with unicode letters in URL?如何通过 HTTP 下载 URL 中带有 unicode 字母的图像?
【发布时间】:2013-02-19 13:10:33
【问题描述】:

如何使用 PHP 下载以下 URL(图片):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);

cURL:

$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 时得到的图片不同。这个网站显然设置了后备图片,所以如果图片不存在,你会得到默认的。

【问题讨论】:

  • 在将其发送到服务器之前,您是否尝试在该 URL 上使用 urlencode?
  • @vectorialpx:您可能想真正回答这个问题,或者其他人会为您提供帮助。

标签: php http curl download


【解决方案1】:

您应该可以在图像名称周围使用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);

【讨论】:

  • 这不起作用。如果您认为应该,请尝试并粘贴代码。
  • 这是因为 URL 中的空格。 urlencode() 将空格更改为 + - 我已将其替换为 rawurlencode(),这样就可以了 :)
【解决方案2】:

您可以使用 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2019-09-19
    相关资源
    最近更新 更多