Curl 从带有卷曲编码内容的URL保存图像时出错
大家好,我正在尝试从URL获取一个图像到我服务器上的一个文件夹,但是我在这个过程中遇到了很多问题。我知道这个url(图片)的内容是另一个字符集,或者类似的东西,我只知道它在预览时显示了很多中文字母,在回复时显示了很多奇怪的字母。代码是:Curl 从带有卷曲编码内容的URL保存图像时出错,curl,image-processing,download,character-encoding,encode,Curl,Image Processing,Download,Character Encoding,Encode,大家好,我正在尝试从URL获取一个图像到我服务器上的一个文件夹,但是我在这个过程中遇到了很多问题。我知道这个url(图片)的内容是另一个字符集,或者类似的东西,我只知道它在预览时显示了很多中文字母,在回复时显示了很多奇怪的字母。代码是: $ch = curl_init ($URL); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, t
$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_转储)
•在响应上(第一行和第二行是我的var_转储)
当我尝试在一个URL上应用这段代码时,这个URL上的图像没有这种特殊字符,它工作得很好,可以下载到我的服务器上。。。但是,当答案包含这些中文字母时,它不会将图像复制到我的文件夹中。您太困惑了,您看到的奇怪字符是您的浏览器试图将JPG二进制数据呈现为文本(ASCII或unicode或其他)。删除var_转储,然后运行
header("content-type: image/jpeg");
echo $rawdata;
相反,如果您告诉浏览器这是一个JPG图像,请按此方式渲染它,浏览器将尝试将其渲染为JPG图像而不是文本,您可能会得到一张图片。:)
此外,如果您使用的是危险的非便携式fopen模式,请将
w
替换为wb
中的$fp=fopen($local_file,'w')代码>,并且它将是可移植的(您当前的fopen模式在基于linux/mac/bsd的OSs中可以正常工作,但会对基于Microsoft Windows的操作系统造成严重破坏,因为它有一个隐式的“文本模式”,其中\n
自动转换为\r\n
,但更改为wb
会将其更改为二进制模式,即使在基于Windows的系统上也是如此。)您非常困惑,您看到的奇怪字符是您的浏览器试图将JPG二进制呈现为文本(ASCII或UTF-8或其他格式),删除变量转储,然后运行标题(“内容类型:图像/jpeg”);echo$rawdata;
,然后告诉浏览器这是一个JPG图像,将其呈现为这样的
,浏览器将尝试将其呈现为JPG图像而不是文本,您可能会得到一张图片。:)对不起,我没有插入所有代码!在这部分之前,有一个regex函数来获取文件的类型pr例如,匹配(“/(.png.jpg)/”,$url,$IMG_type);$local_file=$IMG_destiny.$Name_PROD.“-”$IMG_type;
这个图像的字符集是一种中文,它不是一个普通的jpg二进制文本,点击这个链接()查看。我已经在fopen()上更改为“wb”。非常感谢您的帮助!!JPG图像没有字符集。当然,可能有一些中文字符集文本作为嵌入元数据,但JPG二进制格式根本没有任何字符集。请向我显示一个实际的url,为您实际尝试下载/显示的文件之一提供服务,我会亲自检查,并让您知道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/adapter-mount-p-pesca-c-besta-ams-bowfishing.jpg