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

Kev*_*ani 4 php mysql ajax encoding json

这是我经常遇到的事情,我通常最终会尝试再试一次,直到数据有效.我想,为了保持数据而不是弄乱json,我们会知道最佳做法是什么.

假设我要发送的数据是最令人讨厌的排序的文本数据 - 特殊字符,&,<,",\n,\n\r \n,\ t,+,等等.

我们还假设我想保留utf8中的所有内容,并且我的mysql表配置为utf8.但是,由于缺乏PHP的utf8支持,因此应该考虑这一点.

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

1)通过AJAX POST将JSON数据从客户端JS发送到PHP(GET的任何不同之处?)

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

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

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

Ada*_*lin 5

每当我使用php/mysql/jquery来回传递数据时,我最终使用以下编码/转义的组合,它似乎对我有用.

1)你不需要在这里做任何事情,除非你发送一个URL(我认为这仅用于GET请求) - 但是如果你发送一个url,你需要使用encodeURIComponent(url),这将正确地逃脱网址中的&和特殊字符(详见此处).

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

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

<?php
  htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false);
?>
Run Code Online (Sandbox Code Playgroud)

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

4)使用json_encode应该总是正确地转义你的数据,但我会使用#3中的代码来确保.但是如果你要返回包含特殊字符的数据,你可能只需要它.