PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题
发布:smiling 来源: PHP粉丝网 添加日期:2021-03-08 16:08:39 浏览: 评论:0
这篇文章主要介绍了PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题,json无法正常解析的同学可以看一下,是不是看不见的BOM编码导致的问题,需要的朋友可以参考下。
昨天同事遇到一个奇怪的问题,就是以下代码,无法通过JSON校验,也无法通过PHP的json_decode函数解析,代码如下:
- [
- {
- "title": "",
- "pinyin": ""
- }
- ]
可能聪明的你已经猜到其中包含有不看见的特殊字符,在vim下查看:
- [
- {
- <feff>"title": "",
- "pinyin": ""
- }
- ]
发现在“title”前面有一个字符<feff>,如果你之前了解过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 $'\xEF\xBB\xBF' /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的编辑器修改代码,容易引发一些问题。
Tags: BOM json_decode
相关文章
- ·UTF-8编码怎么去掉BOM头?(2014-09-21)
- ·PHP批量去除BOM头代码分享(2021-06-04)
- ·php的json_decode函数返回null的问题(2014-09-21)
- ·json_decode返回null空问题解决方法(2014-09-21)
- ·php5.2以下版本无json_decode函数的解决方法(2021-01-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)