源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-04-12 15:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP中遇到BOM、<feff>编码导致json_decode函数无法解析问题
昨天同事遇到一个奇怪的问题,就是以下代码,无法通过JSON校验,也无法通过PHP的json_decode函数解析。
[url=http://www.1sucai.cn/article/51745.htm]计算机中的字符串编码、乱码、BOM等问题详解[/url]. 在Linux下通过xxd命令查看文件内容的十六进制:
[u]复制代码[/u] 代码如下:
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的含义如下:
[u]复制代码[/u] 代码如下:
开头字节            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操作
[u]复制代码[/u] 代码如下:
#添加BOM :set bomb #删除BOM :set nobomb #查询BOM :set bomb?
查找UTF-8编码中的BOM
[u]复制代码[/u] 代码如下:
grep -I -r -l $'\xEF\xBB\xBF' /path
还可以在svn的钩子中禁止提交BOM(以下代码来自网络,没校验)
[u]复制代码[/u] 代码如下:
#!/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的编辑器修改代码,容易引发一些问题。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部