为什么base64_encode() 在结果中添加斜杠 “/”?
我正在对应用程序的 URL 后缀进行编码:
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
请注意“X2”前面的斜杠。
为什么会发生这种情况?我以为base64只输出A-Z,0-9和'='作为填充?
我正在对应用程序的 URL 后缀进行编码:
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
请注意“X2”前面的斜杠。
为什么会发生这种情况?我以为base64只输出A-Z,0-9和'='作为填充?
不。Base64 字母表包括 A-Z、a-z、0-9 和 。+
/
如果您不关心对其他应用程序的可移植性,则可以替换它们。
请参见: http://en.wikipedia.org/wiki/Base64#Variants_summary_table
你可以使用类似的东西来代替你自己的符号(当然,只要它不是base64基本字母表,就可以用你想要的任何东西替换和替换!-
_
下面的示例将常规 base64 转换为 rfc 4648 中指定的 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));
}
除了上面的所有答案之外,指出这是预期字母表的一部分,应该注意的是,您在编码字符串中看到a的特殊原因是,因为在编码文本时,生成a的唯一方法是在可被三整除的位置上有一个问号。/
base64
/
base64
ASCII
/