将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥

Posted

技术标签:

【中文标题】将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥【英文标题】:What is the correct encoding / escaping / htmlentities needed when sending data from js to php, php to mysql, and for REST json responses将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是什么 【发布时间】:2011-10-09 05:22:36 【问题描述】:

这是我经常遇到的事情,我通常最终会求助于尝试再试的方法,直到数据有效。我想 SO 会知道为了维护数据而不弄乱 json 的最佳做法是什么。

假设我要发送的数据是最烦人的文本数据——特殊字符、&、

我们还假设我想将所有内容都保存在 utf8 中,并且我的 mysql 表配置为 utf8。但是,由于缺少 php 的 utf8 支持,因此应该考虑这一点。

我应该从什么编码/转义/htmlentities:

1) 通过 AJAX POST 将 JSON 数据从客户端 JS 发送到 PHP(GET 有什么不同吗?)

2) 在PHP中解码数据并将文本字符串存储在mysql数据库中(或存储转义/编码的数据?)

3) 在 PHP 中从 MySQL 数据库中检索数据并作为 JSON 响应返回给 JS AJAX 请求

4) 在来自我们的 REST api 的 JSON 响应中

【问题讨论】:

【参考方案1】:
    为了向 php 发送 json 数据,你不需要做任何特别的事情。 JSON 只是一个序列化的 javascript '变量' 使用准备好的语句!不要尝试使用 php 解码/剥离/更改内容 使用适当的函数来转义json的数据(我不知道是否有内置的php函数) 同 3。

【讨论】:

【参考方案2】:

每当我使用 php/mysql/jquery 来回传递数据时,我最终都会使用以下编码/转义组合,这对我来说似乎效果很好。

1) 你不需要在这里做任何事情,除非你发送一个 URL(我认为这仅适用于 GET 请求) - 但是如果你发送一个 URL,你需要使用 encodeURIComponent(url),它将正确转义 url 中的 & 和特殊字符(查看更多 here)。

2) 使用 mysqli 和绑定参数,它会为你做所有的转义(阅读它here)

3) 在将数据回显到 HTML 文件时,我总是使用它:

<?php
  htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false);
?>

这将正确编码所有特殊字符(false 表示“无双重编码”)。还要确保在您的 html 页面顶部使用正确的 UTF-8 元标记。

4) 使用 json_encode 应该始终正确地转义您的数据,但我会使用 #3 中的代码来确保。但您可能只在返回包含特殊字符的数据时才需要它。

【讨论】:

感谢您的提示,这很有帮助。 php 中的 json_encode / decode 似乎总是有效,所以我想我遇到麻烦的主要问题是通过 ajax 来回发送数据。我将尝试使用 encodeURIComponent。 encodeURIComponent 仅在您将 URL 作为 URL 字符串的一部分发送时才真正需要。否则,任何其他数据都应由 jquery 正确编码。

以上是关于将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP 向 Node.js 发送请求

如何将本地存储从 JS 发送到 PHP 文件(?)

将多个变量从 JS 发送到 PHP

将数据从 PHP 脚本发送到 iOS

如何将多个文件从 Vue js 发送到 PHP

如何将数据从 Heroku 上托管的 Node.js 应用程序发送到托管在完全独立(Cpanel)服务器上的 PHP 文件?