Ошибка при сохранении изображения из URL с закодированным содержимым CURL

Здравствуйте, ребята. Я пытаюсь получить изображение из 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) Предварительный просмотр

• в ответе (первая и вторая строка - мои var_dumps) ответ

Когда я пытаюсь применить этот код к URL, где изображение не имеет такого рода специальных символов, оно работает очень хорошо и загружается на мой сервер... Но когда в ответе есть эти китайские буквы, оно не копирует изображение в мою папку.

1 ответ

Вы так растерялись, что странные символы, которые вы видите, это ваш браузер, пытающийся визуализировать двоичные данные JPG в виде текста (ASCII или Unicode или что-то еще). удалите var_dump и запустите

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

вместо этого, и вы говорите браузеру this is a JPG image, render it as suchи браузер попытается отобразить его как изображение jpg вместо текста, и вы, вероятно, получите изображение.:)

Кроме того, вы используете опасный непереносимый режим fopen, замените w с wb в $fp=fopen($local_file,'w');, и он будет переносимым (ваш текущий режим fopen будет отлично работать в ОС Linux, Mac / BSD, но это приведет к хаосу в операционных системах на базе Microsoft Windows, которые имеют неявный "текстовый режим", где \n автоматически преобразуется в \r\n, но меняется на wb переводит его в двоичный режим, даже в системах на базе Windows.)

Другие вопросы по тегам