将字符编码为 base64 时的不同结果

问题描述

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