【发布时间】:2018-06-18 05:19:44
【问题描述】:
大家好,我正在尝试从 URL 获取图像到我服务器上的文件夹,但是我在执行此过程时遇到了很多麻烦。我知道这个 url(图像)的内容在另一个字符集中,或者类似的东西,我只知道它在预览时显示了很多中文字母,在回复时显示了很多奇怪的字母。代码是:
$ch = curl_init ($URL);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
$rawdata=curl_exec($ch);
curl_close ($ch);
* $charsets = array("UTF-8","ISO-8859-1","GB2312");
* var_dump(mb_detect_encoding($rawdata,$charsets));
* var_dump($rawdata);
$fp = fopen($local_file,'w');
fwrite($fp, $rawdata);
fclose($fp)
// * -> trying to debbug
这个请求的答案是:
• 在预览中(第一行和第二行是我的 var_dumps) The preview
• 关于响应(第一行和第二行是我的 var_dumps) the response
当我尝试将此代码应用于图像没有这种特殊字符的 URL 时,它工作得很好,并将下载到我的服务器...但是当答案有那些中文字母时,它没有' t 将图像复制到我的文件夹。
【问题讨论】:
-
你很困惑,你看到的奇怪字符是你的浏览器试图将 JPG 二进制文件呈现为文本(ASCII 或 UTF-8 或其他),删除 var_dump,然后运行
header("content-type: image/jpeg"); echo $rawdata;,你告诉浏览器this is a JPG image, render it as such,浏览器会尝试将其渲染为jpg图像而不是文本,你可能会得到一张图片。 :) -
我没有插入所有的代码,对不起!在这部分之前有一个正则表达式函数来获取文件的类型
preg_match("/(.png|.jpg)/", $url, $IMG_type); $local_file = $IMG_destiny.$Name_PROD."-".$IMG_type;这个图像的字符集是一种中文,它不是普通的JPG二进制文本,点击这个链接(i.stack.imgur.com/wp0G2.png)查看。我在 fopen() 上更改了“wb”。非常感谢你帮助我!! -
JPG 图像没有字符集。当然,可能有一些中文字符集文本作为嵌入元数据,但 jpg 二进制格式根本没有任何字符集。
-
向我显示一个实际的 url,服务于您实际尝试下载/显示的文件中的 1 个,我会亲自检查并让您知道 wtf 正在进行
-
我正在尝试下载这两个图像,第一个我没有问题可以下载,但是第二个它不起作用 1- w1.ezcdn.com.br/ventureshop/fotos/ grande/6fg1/besta-profissional-jaguar-black-175lbs-quiver-oculos.jpg // 2 - w1.ezcdn.com.br/ventureshop/fotos/grande/8fg1/adaptador-mount-p-pesca-c-besta -ams-bowfishing.jpg
标签: curl image-processing download character-encoding encode