Может ли закодированная строка base64 содержать пробелы?

Может ли закодированная строка base64 содержать пробелы? В частности, может ли он содержать пробелы в конце строки?

PS. Я думаю о целом «MySQL будет обрезать конечные пробелы при хранении строк в VARCHAR-полях» здесь 😉

Нет, не может. См. Base64 для разрешенного репозитория символов, используемого base64 , которые являются символами AZ , az , 0-9 , + и / (последние два могут отличаться в зависимости от реализации), а также отступающий символ = (но это также зависит от реализации так как некоторые реализации вообще не используют отступы).

Это не должно, но это может сделать.

Действительная строка base64 не должна содержать пробелов, поскольку алфавит кодирования должен состоять только из AZ az 0-9 + /

Однако, если кодированные данные содержат символ «+», а данные передаются по URL-адресу, его можно непреднамеренно преобразовать в пробел. Таким образом, вы можете встретить предполагаемую строку base64, которая, как представляется, содержит пробелы в этих обстоятельствах.

Если это так, просто замените пробелы плюсами перед декодированием.

PS. Я думаю обо всем «MySQL будет обрезать конечные пробелы при хранении строк в полях VARCHAR» здесь

В стороне, конечные пробелы varchar не будут случайно удалены с MySQL 5.0.3

Да. Строка, кодированная Base64, может содержать пробелы, но символы несущественны. Так что это нормально, если база данных обрезает пробелы.

По сути, оригинальная спецификация MIME рекомендует разбивать строки Base64 на строки из 72 символов. base64Binary XML также может включать в себя новые строки, вкладки, пробелы.

В PHP base64_decode() удаляет все символы whiltespace, поэтому вам не нужно беспокоиться об этом.

Википедия предполагает, что есть похожие варианты кодировки Base64:

http://en.wikipedia.org/wiki/Base64

Поэтому ответ, вероятно, зависит от того, что вам нужно делать со строкой. Но я бы посмел сказать, что вы создали на PHP с base64_encode (), поэтому, похоже, безопасно добавлять пробелы:

 <?php $original_data = 'Lorem ipsum dolor sit amet'; $encoded_data = base64_encode($original_data); $padded_data = ' ' . chunk_split($encoded_data, 3, ' ') . ' '; echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet' ?> 

Насколько я знаю, это невозможно. В основном строка Base64 должна быть построена из набора из 64 символов. AZ, az, 0-9 составляют 62 – остальные два зависят от реализации.

Основываясь на том, что я знаю, в настоящее время реализована реализация, которая будет использовать пробел как символ. Основная причина этого – читаемость – то есть строка Base64 должна быть легко распечатана и распознана.

Вероятно, вы найдете дополнительную информацию об этом в Википедии .