www.adminn.cn
站长正能量分享网!

PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

这篇文章主要介绍了PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题,json无法正常解析的同学可以看一下,是不是看不见的BOM编码导致的问题,需要的朋友可以参考下。

昨天同事遇到一个奇怪的问题,就是以下代码,无法通过JSON校验,也无法通过PHP的json_decode函数解析,代码如下:

  1.     { 
  2.         "title"""
  3.         "pinyin""" 
  4.     } 

可能聪明的你已经猜到其中包含有不看见的特殊字符,在vim下查看:

  1.     { 
  2.         <feff>"title"""
  3.         "pinyin""" 
  4.     } 

发现在“title”前面有一个字符<feff>,如果你之前了解过BOM,应该知道这个特殊字符就是BOM,关于其介绍可以参考另一篇文章:计算机中的字符串编码、乱码、BOM等问题详解.

在Linux下通过xxd命令查看文件内容的十六进制:

  1. 0000000: 5b 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20  [.    {.        
  2. 0000010: ef bb bf 22 74 69 74 6c 65 22 3a 20 22 22 2c 0a  …"title""",. 
  3. 0000020: 20 20 20 20 20 20 20 20 22 70 69 6e 79 69 6e 22          "pinyin" 
  4. 0000030: 3a 20 22 22 0a 20 20 20 20 7d 0a 5d 0a           : "".    }.]. 

可以看到刚才那个"title"前面的特殊字符十六进制为:ef bb bf,正是标记UTF-8的BOM。BOM的含义如下:

  1. 开头字节            Charset/encoding 
  2. EF BB BF        UTF-8 
  3. FE FF           UTF-16/UCS-2, little endian(UTF-16LE) 
  4. FF FE           UTF-16/UCS-2, big endian(UTF-16BE) 
  5. FF FE 00 00     UTF-32/UCS-4, little endian. 
  6. 00 00 FE FF     UTF-32/UCS-4, big-endia 

发现问题解决就很容易了,查找删除BOM就OK了,linux下BOM相关的命令有:

VIM的BOM操作,代码如下:

  1. #添加BOM 
  2. :set bomb 
  3. #删除BOM 
  4. :set nobomb 
  5. #查询BOM 
  6. :set bomb? 

查找UTF-8编码中的BOM

代码如下:

grep -I -r -l $'\xEF\xBB\xBF' /path

还可以在svn的钩子中禁止提交BOM(以下代码来自网络,没校验)

代码如下:

  1. #!/bin/sh 
  2. REPOS="$1" 
  3. TXN="$2" 
  4.  
  5. SVNLOOK=/usr/bin/svnlook 
  6.  
  7. FILES=`$SVNLOOK changed -t "$TXN" "$REPOS" | awk {'print $2'}` 
  8.  
  9. for FILE in $FILESdo 
  10.     CONTENT=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE"
  11.  
  12.     if echo $CONTENT | head -c 3 | xxd -i | grep -q '0xef, 0xbb, 0xbf'; then 
  13.         echo "BOM!" 1>&2 
  14.         exit 1 
  15.     fi 
  16. done 

最后提醒大家在wowdows下最好别使用记事本等会自动添加BOM的编辑器修改代码,容易引发一些问题。

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题》
文章链接:https://www.adminn.cn/news/8834.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏