base64 — PHP base64_decode возвращает неверный файл изображения

моя проблема:

Я сохраняю загруженную строку base64 в файл, используя PHP. Эта строка происходит из приложения для iPhone и представляет собой файл JPEG в кодировке base64.

Когда я беру содержимое этого файла и добавляю его вручную в источник данных в теге изображения, он отображается ПРАВИЛЬНО. Когда я читаю его с помощью file_get_contents и добавляю полученную строку в тег данных img, он работает ПРАВИЛЬНО.

Моя проблема: когда я читаю файл с помощью file_get_contents и сохраняю результаты с помощью base64_decode (), результирующий файл jpeg НЕДЕЙСТВИТЕЛЬНЫМ.

Мой вопрос: почему явно действительная строка в кодировке base64 не дает действительный файл JPEG при декодировании и сохранении?

Некоторые исходные выдержки:

Это работает как надо, выводит изображение:

$imagepath = "D:\\path\\to\\image\\mybase64image.txt";
$imagecontent = file_get_contents($imagepath);
header("Content-type:text/html");
$d = '<img alt="" src="data:image/jpeg;base64,' . $imagecontent . '"/>';
echo $d;

Это НЕ работает и файл недействителен:

$imagepath = "D:\\path\\to\\image\\mybase64image.txt";
$imagecontent = file_get_contents($imagepath);
file_put_contents('img.jpg', base64_decode($imagecontent));

— img.jpg — это неверный файл.
Пути действительны, файл есть, разрешения также есть (полученный файл img.jpg — это двоичный файл, просто недействительный), и, как я уже сказал, он работает как источник данных.

Вот кодированный в base64 файл:

http://www.mailnet.de/7E072017-DAEB-41E1-B02E-23FB51A05B80.txt

  • Версия PHP 5.3.8 с использованием FASTCGI
  • ОС Windows 2008 R2
  • Веб-сервер IIS 7.5

Любая помощь приветствуется.

1

Решение

% символы не допускаются в наборе b64. Похоже, ваша строка закодирована в URL. urldecode() это, прежде чем передать его base64_decode(),

Он работает в браузере так, как он есть, потому что они всегда декодируют атрибуты URL.

1

Другие решения

Других решений пока нет …