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




php base64解码 (6)

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

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

// Outputs
c3ViamVjdHM/X2Q9MQ==

注意'X2'之前的斜杠。

为什么会这样? 我认为base64只输出AZ,0-9和'='作为填充? 我已经尝试使用在线base64编码器来检查,似乎base64总是这样做。 我不知道它是下划线“_”还是问号“?” 还是“=”或许?


Answer #1

没有直接关系,上面有足够的人已经很好地回答和解释了解决方案。

但是,有点超出了事物的范围。 如果您想要可读的基本文本,请尝试查看Base58 。 如果您只想要字母数字字符,则值得考虑。


Answer #2

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


Answer #3

AZ是26个字符。 0-9是10个字符。 =是一个字符。 这总共给出了37个字符,这比64个字符短。

/是64个字符之一。 您可以在维基百科页面上看到完整列表。


Answer #4

没有什么特别之处。

基数64“字母”或“数字”是AZ,az,0-9加上两个额外字符+(加号)和/(斜杠)。

如果需要,您可以稍后使用%2f进行编码。


Answer #5

对于base64,有效的字符集是:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

=用作最后字节的填充符

M.


Answer #6

不可以.Base64字母表包括AZ,az,0-9和+/

如果您不关心其他应用程序的可移植性,则可以替换它们。

请参阅: http://en.wikipedia.org/wiki/Base64#Variants_summary_tablehttp://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));
}






base64