将数据从 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 是啥的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 Heroku 上托管的 Node.js 应用程序发送到托管在完全独立(Cpanel)服务器上的 PHP 文件?