为什么base64_encode() 在结果中添加斜杠 “/”?

2022-08-30 09:56:40

我正在对应用程序的 URL 后缀进行编码:

$url = 'subjects?_d=1';
echo base64_encode($url);

// Outputs
c3ViamVjdHM/X2Q9MQ==

请注意“X2”前面的斜杠。

为什么会发生这种情况?我以为base64只输出A-Z,0-9和'='作为填充?


答案 1

不。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));
}

答案 2

除了上面的所有答案之外,指出这是预期字母表的一部分,应该注意的是,您在编码字符串中看到a的特殊原因是,因为在编码文本时,生成a的唯一方法是在可被三整除的位置上有一个问号。/base64/base64ASCII/


推荐