Jul*_*les 2 javascript php encoding character
我需要生成一个"随机"128字节密钥(此时随机强度并不重要).我在Javascript中使用以下代码执行此操作:
var buffer = "";
for(var i=0; i<128; i++)
{
buffer += String.fromCharCode(Math.round(Math.random()*255));
}
Run Code Online (Sandbox Code Playgroud)
但是,当我通过POST将此密钥发送到PHP脚本时,我发现我的密钥中的某些字符没有相同的编码!例如,当我在Javascript中输出ò的编码时,我得到254,但是相同的字符在PHP中的编码为195.
某些字符(如AZ,az和0-9)在Javascript和PHP中具有相同的编码.
要输出字符代码,我使用Javascript的.charCodeAt()方法和PHP的ord()函数.
我希望有人可以向我解释为什么字符编码不同.谢谢!
Javascripts .charCodeAt()为每个字符串字符返回Unicode代码点.Javascript中的字符串使用UCS-2或UTF-16.
另一方面,PHP仅将字符串视为字节流.它实际上并不太了解charsets.基本上它默认为字符串ASCII或Latin-1.(至少它是二进制安全的.)
现在通过URL或表单值传输的参数通常被编码为UTF-8.这将在PHP中运行,因为UTF-8专门设计用于不知道其存在的系统.
UTF-8编码ò是"\xC3\xB2".因此,当您使用PHP访问第一个字符时,$string[0]它只会看到第一个字节,即十六进制C3或十进制195.
mb_string如果需要,PHP 中的函数可以处理UTF-8等.(此处的解决方法是将字符串从UTF-8转换为UCS-2,然后提取第一个单词以获取Unicode代码点.或者如何获取utf-8字符串中给定字符的代码点编号等longwinded方法?)
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |