当我将字符编码为 base64 时出现不同的结果

different results when I encode a character to base64

当我将一个字符编码为 base64 时,根据我传递字符的方式,我会得到不同的结果: 例如,我想编码 chr(128) => €

1.passing chr() 的结果:base64_encode(chr(128)) => 'gA=='
2.passing 字符直接:base64_encode('€') => '4oKs'

为什么结果不同?

chr(128) returns 代表 € 符号的 1 字节字符,因此 base64 编码字符串只编码 1 字节(80 十六进制 = 128 十进制):

echo bin2hex(base64_decode('gA=='));

80

另一方面,在base64_encode('€')中'€'是一个unicode字符串,编码结果包含3个字节,欧元符号的unicode表示:

echo bin2hex(base64_decode('4oKs'));

E282AC