js的json php无法json_decode,PHP中遇到BOM、 编码导致json_decode函数无法解析问题
昨天同事遇到一个奇怪的问题,就是以下代码,无法通过JSON校验,也无法通过PHP的json_decode函数解析。
复制代码 代码如下:
[
{
"title": "",
"pinyin": ""
}
]
可能聪明的你已经猜到其中包含有不看见的特殊字符,在vim下查看:
复制代码 代码如下:
[
{
"title": "",
"pinyin": ""
}
]
发现在“title”前面有一个字符,如果你之前了解过BOM,应该知道这个特殊字符就是BOM,关于其介绍可以参考另一篇文章:计算机中的字符串编码、乱码、BOM等问题详解.
在Linux下通过xxd命令查看文件内容的十六进制:
复制代码 代码如下:
0000000: 5b 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 [. {.
0000010: ef bb bf 22 74 69 74 6c 65 22 3a 20 22 22 2c 0a ..."title": "",.
0000020: 20 20 20 20 20 20 20 20 22 70 69 6e 79 69 6e 22 "pinyin"
0000030: 3a 20 22 22 0a 20 20 20 20 7d 0a 5d 0a : "". }.].
可以看到刚才那个"title"前面的特殊字符十六进制为:ef bb bf,正是标记UTF-8的BOM。BOM的含义如下:
复制代码 代码如下:
开头字节 Charset/encoding
EF BB BF UTF-8
FE FF UTF-16/UCS-2, little endian(UTF-16LE)
FF FE UTF-16/UCS-2, big endian(UTF-16BE)
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endia
发现问题解决就很容易了,查找删除BOM就OK了,linux下BOM相关的命令有:
VIM的BOM操作
复制代码 代码如下:
#添加BOM
:set bomb
#删除BOM
:set nobomb
#查询BOM
:set bomb?
查找UTF-8编码中的BOM
复制代码 代码如下:
grep -I -r -l $'' /path
还可以在svn的钩子中禁止提交BOM(以下代码来自网络,没校验)
复制代码 代码如下:
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
FILES=`$SVNLOOK changed -t "$TXN" "$REPOS" | awk {'print $2'}`
for FILE in $FILES; do
CONTENT=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE"`
if echo $CONTENT | head -c 3 | xxd -i | grep -q '0xef, 0xbb, 0xbf'; then
echo "BOM!" 1>&2
exit 1
fi
done
最后提醒大家在wowdows下最好别使用记事本等会自动添加BOM的编辑器修改代码,容易引发一些问题。
js的json php无法json_decode,PHP中遇到BOM、 编码导致json_decode函数无法解析问题相关推荐
- MatLab中rand randi randn 三个函数的解析
MatLab中rand randi randn 三个函数的解析 1.rand 概括:生成(0,1)之间的均匀分布的伪随机数 示例1: >>rand %什么参数也没有,生成一个(0,1)的数 ...
- java 转码%2f%_JS和JAVA中常用的编码转码函数
js中escape,encodeURI,encodeURIComponent函数和unescape,decodeURI和decodeURIComponent函数的功能 1.escape方法对Strin ...
- js怎么将json数据展示在html代码,JS格式化json数据展示到页面中
html页面: 查询json结果 studyid* partnerId token 查询 查询结果: css代码: .red-text { color: red; } .size-big { widt ...
- JS格式化JSON串显示在表格中
JS代码如下,这里用了jq的语法: <script type="text/javascript"> $(function(){var text = $("#s ...
- js进阶--JSON,克隆,解构赋值,class类与箭头函数 06
文章目录 Array.from(类数组) sort中的a,b代表的每一项 JSON 浅克隆 深克隆 es6 let const 对于对象中属性名与属性值一样的只写一个就可以 解构赋值 数组的解构赋值 ...
- Matlab中image、imagesc和imshow函数用法解析
原文转自:http://blog.csdn.net/zhupananhui/article/details/16340345 1.显示RGB图像 相同点:这三个函数都是把m*n*3的矩阵中的数值当做R ...
- vue如何split_Vue中的join(),reverse()与 split()函数用法解析
split(' ')是分裂的意思,也就是把一个数据拆分 var vm = new Vue({ date:{ message=" Not split " } )} message.s ...
- js中的json ajax,js结合json实现ajax简单实例
这篇文章主要为大家详细介绍了js结合json实现ajax简单实例的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前期准备 1.安装wampserver或者其他相似软件来搭建本地集成安装环 ...
- js字符串怎么转python对象_python对象与json相互转换的方法 python中怎么把json对象转成字符串...
在python中 如何实现将一个json字符串转化为对象 对象?json不能包含对象, 只能包含基本的数据类型, 键值对, 列表, 数字, 字符串等等 import jsond = {"k& ...
最新文章
- 震惊!Canvas原来还能这么搞!代码画一个时钟出来
- Silverlight在调用wcf时传输数据过大返回Not Found的解决办法
- MySQL复制数据库
- 如何使用计算机改进生产线,第四章 计算机生产管理.doc
- tomcat(5)servlet容器
- php 分布式数据库查询,分布式数据库 · Thinkphp5.0完全开发手册 · 看云
- 基于Java+SpringBoot+vue+element实现校园闲置物品交易网站
- CentOS8如何修改系统日志的时间戳格式(rsyslog8版本)
- mysql跳过安全_几年了,作为一个码农终于把MySQL日记看懂了!
- S5PV210体系结构与接口02:ARM编程模型 汇编指令
- Linux进程管理之SMP负载平衡
- python实现虚拟键盘
- java博饼_java博饼游戏( 完善中。。。。。。。。。。。)
- 写论文时遇到的问题及解决办法
- python兔子_python学习:关于生兔子问题
- 【Python基础】03 程序的控制流
- 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计
- 小学计算机集体听课评课,小学听评课的活动总结(精选5篇)
- 淘宝官方订单接口、商品订单详情API、订单列表API
- 如何使用ChatGPT帮助孩子辅导作业?