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