моя проблема:
Я сохраняю загруженную строку 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
Любая помощь приветствуется.
%
символы не допускаются в наборе b64. Похоже, ваша строка закодирована в URL. urldecode()
это, прежде чем передать его base64_decode()
,
Он работает в браузере так, как он есть, потому что они всегда декодируют атрибуты URL.
Других решений пока нет …