【问题标题】:Error on Save a Image from a URL with CURL, encoded content从带有 CURL、编码内容的 URL 保存图像时出错
【发布时间】: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


【解决方案1】:

您很困惑,您看到的奇怪字符是您的浏览器试图将 JPG 二进制数据呈现为文本(ASCII 或 unicode 或其他)。删除 var_dump,然后运行

header("content-type: image/jpeg"); 
echo $rawdata;

相反,您告诉浏览器this is a JPG image, render it as such,浏览器会尝试将其渲染为jpg 图像而不是文本,您可能会得到一张图片。 :)

另外,您正在使用危险的非便携式 fopen 模式,将 wb 中的 w 替换为 $fp=fopen($local_file,'w'); ,它将是可移植的(您当前的 fopen 模式在 linux/mac/bsd 中可以正常工作-based 的操作系统,但会对基于 Microsoft Windows 的操作系统造成严重破坏,该操作系统具有隐式的“文本模式”,其中\n 会自动转换为\r\n,但更改为wb 会将其更改为二进制模式,甚至在基于 Windows 的系统上。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多