问题描述
当我将字符编码为 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