php接口开发时,数据解析失败问题,字符转义,编码问题
Posted 学知无涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php接口开发时,数据解析失败问题,字符转义,编码问题相关的知识,希望对你有一定的参考价值。
php接口开发时,数据解析失败问题,字符转义,编码问题
情景:
A平台--->向接口请求数据---->接口向B平台请求数据---->B平台返回数据给接口---->接口返回数据给A平台。
数据经过多遍传递,出现编码、特殊字符转义的的问题。
遇到问题:
(1)第一个问题:A发过来的数据,参数值是json字符串,接收到之后无法解析,查看数据后发现json数据中的双引号被转成了"
也就是预定义的字符被转成了html实体,需要使用 htmlspecialchars_decode()转回去,然后再交给B平台才能解析。
(2)当接口收到数据返回给A平台时,json有数据,但是数据却解析不了,打印出数据和正常的json数据对比后,
发现比正常的json数据长度多了3位,网上搜索后,说多了bom头,可以使用 json_last_error()函数验证,
示例:
$info = json_decode($data,true); if(json_last_error() == 4){ //多了bom头 $correct_json_str = trim($data, "xEFxBBxBF"); $info = json_decode($correct_json_str,true); }
关于这个问题,虽然这样笨拙地解决了,但是还是不知道为什么会这样,
接口的文件编码是utf-8,
返回数据时,header(‘Content-Type:application/json; charset=utf-8‘);也指定了utf-8,
为什么还出现这种问题,LNMP环境、ThinkPHP框架,
欢迎大佬们指点,谢谢!
以上是关于php接口开发时,数据解析失败问题,字符转义,编码问题的主要内容,如果未能解决你的问题,请参考以下文章
JSON.parse 解析json字符串时,遇字符串换行符,解析失败
PHP - json_encode(string, JSON_UNESCAPED_UNICODE) 不转义捷克字符
将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥