php - 如何通过 HTTP 下载 URL 中包含 unicode 字母的图像?

标签 php http curl download

如何使用 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 粘贴到浏览器中时得到的图片不同。该网站显然设置了后备图片,因此如果该图片不存在,您将获得默认值。

最佳答案

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

关于php - 如何通过 HTTP 下载 URL 中包含 unicode 字母的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958359/

相关文章:

javascript - 如何拦截浏览器发出的 HTTP 请求?

curl - 如何使用Curl命令在 header 中传递 “Content-Length”值

rest - 如何通过 curl 使用他们的 rest api 从 Nexus 检索工件校验和?

php - PDO误报死锁

php - WooCommerce 彩票号码 : Add leading zeros to lottery numbers

php - 为什么我的代码只返回 php mysql 中的每秒结果?

javascript - Stack Overflow 如何在不重新加载页面的情况下通知服务器端事件?我在 Firebug 中没有看到任何请求

rest - Etag token 如何在 HTTP 中的条件 GET 中工作?

javascript - Jquery - 将值附加到段落

javascript - 异步API和回调