Php base64 decode не работает

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

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

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

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

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

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

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

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

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

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

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

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

Решение

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

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

Источник

Php base64 decode не работает

savage
Дата 21.1.2006, 09:07 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.8.2003

Репутация: нет
Всего: нет

В переменной $_GET[‘str’] храница надпись «Добро пожаловать», только закодированная с помощью base64_encode($_GET[‘str’])=’xO7h8O4g7+7m4Ovu4uDy/C4=’
В результате работы скрипта, получаю на экран следующее:
обращаемся к скрипту: x.php?str=xO7h8O4g7+7m4Ovu4uDy/C4=
пишет:
Добро п№ё:ыёё | (нет голосов) Загрузка .

Velichko Anton

Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18

Код
echo base64_decode(urldecode($_GET[‘str’]));

Это сообщение отредактировал(а) AntonioBanderaz — 22.1.2006, 03:38

savage
Дата 22.1.2006, 09:43 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.8.2003

Репутация: нет
Всего: нет

Mal Hack
Дата 22.1.2006, 11:21 (ссылка) | (нет голосов) Загрузка .

Мудрый.

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261

savage
Дата 22.1.2006, 18:35 (ссылка) | (нет голосов) Загрузка .

Шустрый

Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.8.2003

Репутация: нет
Всего: нет

Код
urlencode(base64_encode($_GET[‘str’]));
wsr
Дата 23.1.2006, 00:41 (ссылка) | (нет голосов) Загрузка .

Fuzzy Logic

Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2

Код
$str=’Добро пожаловать’;
$s=base64_encode($s); # Здесь четко видно, что кодируется не строка «Добро пожаловать», а какая-то другая.
print base64_decode($_GET[‘str’]).’
‘;
print base64_decode($s); # И вот поэтому у тебя не работало.

На и как уже сказали, это urlencode();

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »

[ Время генерации скрипта: 0.1098 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Читайте также:  Как отремонтировать лобзик макита
Оцените статью