Bad*_*sie 39 php base64 encoding
我正在编码我的应用程序的URL后缀:
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
Run Code Online (Sandbox Code Playgroud)
注意'X2'之前的斜杠.
为什么会这样?我认为base64只输出AZ,0-9和'='作为填充?我已经尝试使用在线base64编码器来检查,似乎base64总是这样做.我不知道它是下划线"_"还是问号"?" 还是"="或许?
Art*_*ct2 82
不可以.Base64字母包括AZ,az,0-9 +
和/
.
如果您不关心其他应用程序的可移植性,则可以替换它们.
请参阅:http://en.wikipedia.org/wiki/Base64#Variants_summary_table
您可以使用类似的东西来代替使用您自己的符号(替换-
和_
您想要的任何东西,只要它不在base64基本字母表中,当然!).
以下示例将普通base64转换为RFC6448 中指定的 base64url :
function base64url_encode($s) {
return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));
}
function base64url_decode($s) {
return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));
}
Run Code Online (Sandbox Code Playgroud)
Sno*_*kle 12
除了上面的所有答案,指出/是预期的base64字母表的一部分,应该注意你在编码字符串中看到/的特殊原因,是因为当base64编码ASCII文本时,唯一的方法是生成一个/是在一个可被三整除的位置上的问号.
对于 Base64,有效的字符集为:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
= 用作最后字节的填充符
M。
没有直接关系,上面有足够多的人已经很好地回答和解释了解决方案。
然而,有点超出了事情的范围。如果您想要可读的基本文本,请尝试查看Base58。如果您只需要字母数字字符,那么值得考虑。