昨天同事遇到一个奇怪的问题,就是以下代码,无法通过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函数无法解析问题相关推荐

  1. MatLab中rand randi randn 三个函数的解析

    MatLab中rand randi randn 三个函数的解析 1.rand 概括:生成(0,1)之间的均匀分布的伪随机数 示例1: >>rand %什么参数也没有,生成一个(0,1)的数 ...

  2. java 转码%2f%_JS和JAVA中常用的编码转码函数

    js中escape,encodeURI,encodeURIComponent函数和unescape,decodeURI和decodeURIComponent函数的功能 1.escape方法对Strin ...

  3. js怎么将json数据展示在html代码,JS格式化json数据展示到页面中

    html页面: 查询json结果 studyid* partnerId token 查询 查询结果: css代码: .red-text { color: red; } .size-big { widt ...

  4. JS格式化JSON串显示在表格中

    JS代码如下,这里用了jq的语法: <script type="text/javascript"> $(function(){var text = $("#s ...

  5. js进阶--JSON,克隆,解构赋值,class类与箭头函数 06

    文章目录 Array.from(类数组) sort中的a,b代表的每一项 JSON 浅克隆 深克隆 es6 let const 对于对象中属性名与属性值一样的只写一个就可以 解构赋值 数组的解构赋值 ...

  6. Matlab中image、imagesc和imshow函数用法解析

    原文转自:http://blog.csdn.net/zhupananhui/article/details/16340345 1.显示RGB图像 相同点:这三个函数都是把m*n*3的矩阵中的数值当做R ...

  7. vue如何split_Vue中的join(),reverse()与 split()函数用法解析

    split(' ')是分裂的意思,也就是把一个数据拆分 var vm = new Vue({ date:{ message=" Not split " } )} message.s ...

  8. js中的json ajax,js结合json实现ajax简单实例

    这篇文章主要为大家详细介绍了js结合json实现ajax简单实例的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前期准备 1.安装wampserver或者其他相似软件来搭建本地集成安装环 ...

  9. js字符串怎么转python对象_python对象与json相互转换的方法 python中怎么把json对象转成字符串...

    在python中 如何实现将一个json字符串转化为对象 对象?json不能包含对象, 只能包含基本的数据类型, 键值对, 列表, 数字, 字符串等等 import jsond = {"k& ...

最新文章

  1. 震惊!Canvas原来还能这么搞!代码画一个时钟出来
  2. Silverlight在调用wcf时传输数据过大返回Not Found的解决办法
  3. MySQL复制数据库
  4. 如何使用计算机改进生产线,第四章 计算机生产管理.doc
  5. tomcat(5)servlet容器
  6. php 分布式数据库查询,分布式数据库 · Thinkphp5.0完全开发手册 · 看云
  7. 基于Java+SpringBoot+vue+element实现校园闲置物品交易网站
  8. CentOS8如何修改系统日志的时间戳格式(rsyslog8版本)
  9. mysql跳过安全_几年了,作为一个码农终于把MySQL日记看懂了!
  10. S5PV210体系结构与接口02:ARM编程模型 汇编指令
  11. Linux进程管理之SMP负载平衡
  12. python实现虚拟键盘
  13. java博饼_java博饼游戏( 完善中。。。。。。。。。。。)
  14. 写论文时遇到的问题及解决办法
  15. python兔子_python学习:关于生兔子问题
  16. 【Python基础】03 程序的控制流
  17. 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计
  18. 小学计算机集体听课评课,小学听评课的活动总结(精选5篇)
  19. 淘宝官方订单接口、商品订单详情API、订单列表API
  20. 如何使用ChatGPT帮助孩子辅导作业?

热门文章

  1. java正则提取字符串中的符号汉字数字字母
  2. telegram 常见问题
  3. 润雅信息完成B轮融资 大数据平台赋能汽车销售
  4. Eclipse中怎样将java项目转化为web项目?
  5. 短链接服务商Bitly推出名为RealTime的“互联网热点发掘引擎”
  6. 使用 Python 和 Bitly 缩短您的 URL
  7. ionic自定义图标
  8. Hadoop集群搭建(所需软件安装包已上传发布)
  9. c语言从键盘输入十个整数,冒泡法从大到小排序
  10. 集丰照明|一帖说清6种防眩射灯应用在家装修上