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响应中
每当我使用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中的代码来确保.但是如果你要返回包含特殊字符的数据,你可能只需要它.