繁体   English   中英

Javascript和PHP中的字符编码是否有所不同?

[英]Does character encoding differ in Javascript and PHP?

我需要生成一个“随机的” 128字节密钥(随机性的强度目前并不重要)。 我使用以下代码在Javascript中执行此操作:

var buffer = "";
for(var i=0; i<128; i++)
{
    buffer += String.fromCharCode(Math.round(Math.random()*255));
}

但是,当我通过POST将密钥发送到PHP脚本时,发现密钥中的某些字符没有相同的编码! 例如,当我在Javascript中输出ò的编码时,我得到254,而在PHP中,同一字符的编码为195。

某些字符(例如AZ,az和0-9)在Javascript和PHP中具有相同的编码。

要输出字符代码,我使用Javascript的.charCodeAt()方法和PHP的ord()函数。

我希望有人可以向我解释为什么字符编码不同。 谢谢!

Javascript .charCodeAt()返回每个字符串字符的Unicode代码点。 Javascript中的字符串使用UCS-2或UTF-16。

另一方面,PHP仅将字符串视为字节流。 实际上,它并不了解很多字符集。 基本上,默认情况下,它考虑字符串ASCII或Latin-1。 (至少是二进制安全的。)

现在,通过URL或表单值传输的参数通常会编码为UTF-8。 这将在PHP中起作用,因为UTF-8是专门为与不知道其存在的系统一起使用而设计的。

ò的UTF-8编码为"\\xC3\\xB2" 因此,当您使用$string[0]访问PHP中的第一个字符时,它将仅看到第一个字节,即十六进制C3或十进制195

PHP中有mb_string函数,但是如果需要,可以处理UTF-8等。 (此处的解决方法是将字符串从UTF-8转换为UCS-2,然后提取第一个单词以获取Unicode代码点。或者采用冗长的方法,例如如何获取utf-8字符串中给定字符的代码点编号?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM