我正在编码我的应用程序的 URL 后缀:
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
注意“X2”之前的斜线。
为什么会这样?我以为base64只输出AZ、0-9和'='作为填充?
不会。Base64 字母表包括 AZ、az、0-9 和+
and /
。
如果您不关心对其他应用程序的可移植性,您可以替换它们。
见: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));
}
除了上面的所有答案之外,指出这/
是预期base64
字母表的一部分,应该注意的是/
,您在编码字符串中看到 a 的特殊原因是因为在base64
编码ASCII
文本时,生成 a 的唯一方法/
是在可被三整除的位置上的问号。
对不起,你想错了。A-Za-z0-9 只能得到 62 个字符。Base64 使用两个额外的字符,在 PHP 的情况下/
和+
.
没有什么特别的。
基数为 64 的“字母”或“数字”是 AZ、az、0-9 加上两个额外的字符 +(加号)和 /(斜杠)。
如果需要,您可以稍后使用 %2f 对 / 进行编码。
没有直接关系,上面有足够多的人很好地回答和解释了解决方案。
但是,有点超出了事情的范围。如果您想要可读的基本文本,请尝试查看Base58。如果您只需要字母数字字符,则值得考虑。
AZ 是 26 个字符。0-9 是 10 个字符。= 是一个字符。总共有 37 个字符,比 64 个要少一些。
/
是 64 个字符之一。您可以在 wikipedia 页面上查看完整列表。
对于 base64,有效的字符集是:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
= 用作最后一个字节的填充符
M。