Dre*_*ens 6 php url perl base64 encoding
在查看URL安全base 64编码时,我发现它是一个非常非标准的东西.尽管PHP拥有大量内置函数,但没有一个用于URL安全base 64编码.在手册页上base64_encode()
,大多数评论建议使用该功能,包括strtr()
:
function base64_url_encode($input)
{
return strtr(base64_encode($input), '+/=', '-_,');
}
Run Code Online (Sandbox Code Playgroud)
我在这个领域唯一可以找到的Perl模块是MIME :: Base64 :: URLSafe(source),它在内部执行以下替换:
sub encode ($) {
my $data = encode_base64($_[0], '');
$data =~ tr|+/=|\-_|d;
return $data;
}
Run Code Online (Sandbox Code Playgroud)
与上面的PHP函数不同,这个Perl版本完全删除'='(等于)字符,而不是像PHP那样用','(逗号)替换它.Equals是一个填充字符,因此Perl模块在解码时根据需要替换它们,但这种差异使得两个实现不兼容.
最后,Python函数urlsafe_b64encode(s)保持'='填充,提示有人提出此函数来删除在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))
Run Code Online (Sandbox Code Playgroud)
这里的愿望是有一个字符串可以包含在URL中而无需进一步编码,因此字符'+','/'和'='的开头或翻译.既然没有明确的标准,那么正确的方法是什么?
我认为没有对错.但最流行的编码是
'+/=' => '-_.'
Run Code Online (Sandbox Code Playgroud)
这被谷歌,雅虎广泛使用(他们称之为Y64).我在Java上使用的最安全的编码器版本,Ruby支持这个字符集.
归档时间: |
|
查看次数: |
2617 次 |
最近记录: |