网站地图    收藏   

主页 > 系统 > linux系统 >

linux下查找包含utf8 BOM头的文件,并删除BOM头信息(FEEF)

来源:未知    时间:2015-06-19 11:27 作者:xxadmin 阅读:

[导读] 今天收到用户反馈,用户在举报谈谈的谈主时会显示提交失败。 这个反馈页面入口在反馈平台,调用谈谈项目的后端接口。 这个服务相关的接口都好久没有动了,为什么会失败呢? 在...

今天收到用户反馈,用户在举报谈谈的谈主时会显示提交失败。
这个反馈页面入口在反馈平台,调用谈谈项目的后端接口。 这个服务相关的接口都好久没有动了,为什么会失败呢?
在线上找了一台机器进行debug,发现接口返回内容是“正常”的,一段可读的json字符串。把字符串拷贝下,在js下发现是可以解析的。
但是该项目下用的json_decode,却怎么都decode不成功。调试了半天都觉得甚是古怪,一直都找不到头绪,怕自己脑子是思维定势了,跑去看了会golang,再回来继续解决。
再怎么看, 都还是觉得很正常,不应该出问题。
再一次拷贝接口返回的字符串的时候,发现头部多了个标签。

feff-utf8_bom_remove_linux_vim

feff-utf8_bom_remove_linux_vim

查了下,发现这个FEFF就是BOM。 参考:字节顺序标记

找到问题所在了,解决问题就好说了。
windows下有各式各样的编辑器,都可以解决bom头问题,可是linux下该怎么解决呢?
google了下,问题都解决了。
1.找到哪些文件包含BOM头。

Example
1
grep -rl $'\xEF\xBB\xBF' .

通过hexdump可以看到bom头的存在。

hexdump-BOM-utf8-file

hexdump-BOM-utf8-file

2.删除BOM头信息。

Example
1
sed '1s/^\xEF\xBB\xBF//'  filename.php -i

删除后就不会再看到BOM头拉。

hexdump-NO-BOM-utf8-file

hexdump-NO-BOM-utf8-file

可以用一条命令查找并删除文件的BOM头信息:

Example
1
find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;

总结:
在多人维护的项目下,很可能会有其他人上传一些不合适的文件或代码,需要对一些常规情况进行监控,及时发现、解决,避免影响线上问题。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论