Я кодирую суффикс URL моего приложения:
$url = 'subjects?_d=1'; echo base64_encode($url); // Outputs c3ViamVjdHM/X2Q9MQ==
Обратите внимание на косую черту перед «X2».
Почему это происходит? Я думал, что base64 выводит только AZ, 0-9 и '=' в качестве дополнения? Я пробовал использовать онлайн-кодировщик base64 для проверки, и кажется, что base64 всегда это делает. Я не могу сказать, является ли это подчеркиванием «_» или вопросительным знаком «?» или "=", возможно?
Нет. Алфавит Base64 включает AZ, az, 0-9 и +
и /
.
Вы можете заменить их, если вам не нужна переносимость в отношении других приложений.
См .: http://en.wikipedia.org/wiki/Base64#Variants_summary_table
Вы можете использовать что-то подобное, чтобы вместо этого использовать свои собственные символы (замените -
и _
на все, что хотите, если это не в базовом алфавите base64, конечно!).
Следующий пример преобразует нормальный base64 в base64url, как указано в RFC 4648 :
function base64url_encode($s) { return str_replace(array('+', '/'), array('-', '_'), base64_encode($s)); } function base64url_decode($s) { return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s)); }
Извините, вы ошибались. A-Za-z0-9 получает только 62 символа. Base64 использует два дополнительных символа, в случае PHP /
и +
.
В этом нет ничего особенного.
Основой 64 "алфавита" или "цифр" являются AZ, az, 0-9 плюс два дополнительных символа + (плюс) и / (косая черта).
Вы можете позже кодировать / с% 2f, если хотите.
AZ – 26 символов. 0-9 – 10 символов. = один символ. Это дает в общей сложности 37 символов, что немного отличается от 64.
/
является одним из 64 символов. Вы можете увидеть полный список на странице wikipedia .
В дополнение ко всем вышеприведенным ответам, указывающим, что / является частью ожидаемого алфавита base64, следует отметить, что особая причина, по которой вы видели / в вашей закодированной строке, заключается в том, что когда base64 кодирует текст ASCII, единственный способ сгенерировать a /, чтобы иметь знак вопроса в позиции, делящейся на три.
Для base64 действительная кодировка: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
the = используется как filler для последних байтов
М.
Не имеет прямого отношения, и достаточно людей выше ответили и объяснили решения достаточно хорошо.
Однако, немного отставая от объема вещей. Если вам нужен читаемый базовый текст, попробуйте взглянуть на Base58 . Стоит подумать, хотите ли вы только буквенно-цифровые символы.