Какие замены символов следует выполнить, чтобы сделать URL-кодировку base 64 безопасной?
Рассматривая кодирование URL-адреса безопасной базы 64, ямы обнаружили, что это очень нестандартная вещь. Несмотря на обилие встроенных функций, которые есть в PHP, нетt один для URL безопасной кодировки base 64. На странице руководства дляbase64_encode()
Большинство комментариев предлагают использовать эту функцию, заключенную в:strtr()
function base64_url_encode($input)
{
return strtr(base64_encode($input), '+/=', '-_,');
}
Единственный модуль Perl, который я смог найти в этой области, этоMIME :: Base64 :: URLSafe (источник), которая выполняет внутреннюю замену:
sub encode ($) {
my $data = encode_base64($_[0], '');
$data =~ tr|+/=|\-_|d;
return $data;
}
В отличие от функции PHP выше, эта версия Perl сбрасывает '=' (равно) символ полностью, вместо того, чтобы заменить его на ',' (запятая), как делает PHP. Равный - это символ заполнения, поэтому модуль Perl заменяет их по мере необходимости при декодировании, но это различие делает эти две реализации несовместимыми.
Наконец, функция Pythonurlsafe_b64encode (ы) держит '=' набегая, побуждая кого-то миритьсяэта функция удалить заполнение, которое заметно в результатах Google для 'python base64 url safe ':
from base64 import urlsafe_b64encode, urlsafe_b64decode
def uri_b64encode(s):
return urlsafe_b64encode(s).strip('=')
def uri_b64decode(s):
return urlsafe_b64decode(s + '=' * (4 - len(s) % 4))
Желание здесь состоит в том, чтобы иметь строку, которая может быть включена в URL без дополнительной кодировки, следовательно, исключение или перевод символов '+', '/'и '=', Так как нетопределенный стандарт,какой правильный путь?