gpt4 book ai didi

php - Javascript 和 PHP 中的字符编码是否不同?

转载 作者:行者123 更新时间:2023-12-02 07:43:42 26 4
gpt4 key购买 nike

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

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

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

某些字符,例如 A-Z、a-z 和 0-9 在 Javascript 和 PHP 中具有相同的编码。

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

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

最佳答案

Javascripts .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.

mb_string但是,如果需要,PHP 中的函数可以处理 UTF-8 等。 (这里的解决方法是将字符串从 UTF-8 转换为 UCS-2,然后提取第一个 word 以获得 Unicode 代码点。或者像 How to get code point number for a given character in a utf-8 string? 这样的冗长方法)

关于php - Javascript 和 PHP 中的字符编码是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com