Какие замены символов следует выполнить, чтобы сделать 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 без дополнительной кодировки, следовательно, исключение или перевод символов '+', '/'и '=', Так как нетопределенный стандарт,какой правильный путь?

Ответы на вопрос(5)

Ваш ответ на вопрос