【发布时间】:2021-02-12 12:19:50
【问题描述】:
当我将一个字符编码为 base64 时,我会得到不同的结果,具体取决于我传递字符的方式:
比如我想编码chr(128) => €
1.传递chr()的结果:base64_encode(chr(128)) => 'gA=='
2.直接传递字符:base64_encode('€') => '4oKs'
为什么结果不同?
【问题讨论】:
当我将一个字符编码为 base64 时,我会得到不同的结果,具体取决于我传递字符的方式:
比如我想编码chr(128) => €
1.传递chr()的结果:base64_encode(chr(128)) => 'gA=='
2.直接传递字符:base64_encode('€') => '4oKs'
为什么结果不同?
【问题讨论】:
chr(128) 返回一个代表欧元符号的 1 字节字符,因此 base64 编码的字符串只编码 1 个字节(80 十六进制 = 128 十进制):
echo bin2hex(base64_decode('gA=='));
80
另一方面,base64_encode('€') 中的“€”是一个 unicode 字符串,编码结果包含 3 个字节,即欧元符号的 unicode 表示:
echo bin2hex(base64_decode('4oKs'));
E282AC
【讨论】: