php - 如何为 JavaScript 和 JSON 正确编码 UTF-8?

标签 php javascript json encoding utf-8

我在创建输入验证散列时遇到问题。 JavaScript 向 API 提交数据,API 使用 json_encode 验证发送的数据。基本上它是这样工作的:

$input=array('name'='John Doe','city'=>'New York');
$validationHash=sha1(json_encode($input).$key); // Key is known to both servers

如果 PHP 连接到另一台服务器,则一切正常。它也可以通过 JavaScript 工作(我在那里也有一个自定义的 sha1() 函数):

var validationHash=sha1(JSON.stringify({'name':'John Doe','city'=>'New York'})+key);

当字符串包含 UTF-8 字符时,我的问题就来了。例如,如果其中一个值是:

Ränisipelgasöösel

然后PHP服务器接收到命令,经过JSON编码后将其转换为:

R\u00e4nisipelgas\u00f6\u00f6sel

我也需要在 JavaScript 中执行此操作,但我还不知道如何操作。我需要确保向服务器发送正确的验证散列,否则命令会失败。我从 Google 发现可以使用 unescape(encodeURIComponent(string)) 和 decodeURIComponent(),但它们都没有给我 PHP 具有的相同字符串并用于验证。

UTF-8 用于客户端和服务器。

有什么想法吗?

最佳答案

这似乎是不可能的。我找到的唯一可行的解​​决方案是在浏览器端使用 encodeURIComponent() 对所有数据进行编码,在 PHP 端使用 rawurlencode() 对所有数据进行编码,然后根据数组中的这些值计算 JSON。

关于php - 如何为 JavaScript 和 JSON 正确编码 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142050/

相关文章:

javascript - knockout 错误?,无法匹配评论结束

arrays - 快速检索 JSON 数据

php - 如何解析包含 "parse_ini_file"特殊字符的 ini 文件?

javascript - Lodash 从一个集合创建一个集合

Php Javascript 将 document.write 的内容写入变量

JavaScript - 获取有关浏览器的详细信息

java - 如何使用java向json添加数据?

java - 根据位置过滤 Shodan 查询结果

php - 我们应该使用 PHP websocket 还是 Node.js?或者它们是完全不同的东西?

php - 无法访问 protected 属性 Illuminate\Database\MySqlConnection::$pdo