我试图实现PHP hex2bin
的JS类似物。我在JS中找到了hex2bin的几个版本,但是所有这些都显示相同的结果,这与PHP结果不同。
例如,字符串440EF96DB9A2225C32E031659DF2608B49932F0D8AFAC46F74FA56FF3E1AE952
如下所示:
如我所见,结果非常相似,但仍然不同。有什么问题吗?
答案 0 :(得分:2)
没有错。结果相同,但是字符串的显示方式不同。 PHP和JavaScript输出某些字符的方式有所不同。以代码点为249的字符为例:
echo chr(249);
// Equivalent to
echo hex2bin("F9");
输出为“ ...”。
在JavaScript中,相同字符的输出为“ù”:
console.log(String.fromCharCode(249));
其他字符可能在一个中根本看不到,但在另一个中可见。两种语言的内部字符编码不同,这也可能在字符串渲染中起作用。
如果要确保它们相同,请以base64编码表示hex2bin
输出:
在PHP(base64_encode
)中:
base64_encode(hex2bin("440EF96DB9A2225C32E031659DF2608B49932F0D8AFAC46F74FA56FF3E1AE952"));
在JavaScript(btoa
)中:
const hex2bin = s => s.match(/../g).map(c => String.fromCharCode(parseInt(c, 16))).join``;
console.log(btoa(hex2bin("440EF96DB9A2225C32E031659DF2608B49932F0D8AFAC46F74FA56FF3E1AE952")));
两个输出:
RA75bbmiIlwy4DFlnfJgi0mTLw2K + sRvdPpW / z4a6VI =