在本地Windows机上开发的PHP程序上传到linuxserver上后,通过浏览器訪问对应接口。发现返回的数据前多了一个莫名的字符‘-’,甚为不解。之后通过网络抓包的方式,查看到接口返回数据前多了 EF BB BF。

出现了如此令人不知所以然的bug总是极度让人抓狂。经过了几番尝试之后,仍然不能得以解决,但也隐隐感认为可能是字符编码的问题,遂用PHPStorm新建了一个文件,然后又一次将之前出bug的文件内容重写了一遍(庆幸文件不是太大,用svn的话,应将文件回滚到之前没有bug的版本号),然后又一次上传。问题竟然攻克了。

喜悦中就此作罢,并没有深究当中的缘由。

原本以为bug就此解除,结果之后又碰到了一次,实在不能忍。这次查看代码并非採用在本机上改然后又一次上传server的方式,而是直接在server上用vim打开逐行查看。结果惊喜出现了。vim的文件头显示多了‘<feff>’字符。直觉告诉自己这就是罪魁祸首。于是进一步探究了<feff>字符。

这里首先说一下utf8、utf16、utf32编码。由于这样的编码相应多个字节,所以一般utf16和utf32会用BOM(Byte Order Mark,为不可见字符)标识内部编码的字节序(Big/Litttle Endian),而utf8加不加BOM都能够。一般我们用的编辑器utf8编码是没有加BOM标识的,可是windows下的记事本却会将utf8编码的文件前加上BOM标识。

而这个BOM标识即相应着linux环境下vim打开后出现的<feff>字符。

<feff>字符会出如今<?php
...?>的前面。PHP对这种文件进行解析时。会将这个字符输出,从而导致了上述的bug。

PS:还是少用记事本打开或编辑utf8编码的代码,血的教训啊。。!

小谈Vim打开文件开头的&lt;feff&gt;的更多相关文章

  1. Windows下Git Bash中VIM打开文件中文乱码

    Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 admin@DESKTOP-O99620V MINGW64 /d/项目GGE/Hard_for_GGE (master) ...

  2. vim打开文件时显示行号

    vim打开文件是,默认不提示行号. 至于显示行号的用途,因人而异 linux下一个主机可能有N个账户.对于配置分为两种:仅配置当前账户,配置所有账户 vim配置文件路径(Centos  5.5 fin ...

  3. Ubuntu下vim打开文件时,提示请按ENTER或其它命令继续

    最近配置了一下vim,重启后,配置生效.但在用vim打开文件的时候,出现了一个问题:每次用vim打开文件的时候,都会提示请按ENTER或其它命令继续.这个真的很烦人.那么怎么把它消除掉呢? 首先要搞清 ...

  4. Vim 打开文件同时定位到某一行

    在linux下,当后台某一行报警出错后,想用vim打开文件同时定位到某一行, Vim +某一行 filename 即可.

  5. 使用vim打开文件的16进制形式,编辑和全文替换

    1.先用vim打开文件的二进制形式,如果不以二进制可能会产生转换错误. vim -b file-to-open.dat 2.用xxd把文件转换成十六进制格式 :%!xxd 现在就可以对待普通文本一样查 ...

  6. Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题

    Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题 Debian9.4系统不能再VIM打开文件界面不能使用右键复制粘贴 root@debian:~# vim /usr/sh ...

  7. vi/vim打开文件提示Found a swap file by the name

    问题分析 有一次在远程连接主机时,用vi打开文件my.ini却提示:Found a swap file by the name ".my.ini.swp".百度了下才知道,原来在使 ...

  8. VIM打开文件与保存文件

    打开文件 VIM /etc/inittab 默认的安装没有设置ctrl_W为退出.也可以设置::map <C-W> :close<CR> 或:map <C-W> : ...

  9. Vim打开文件中文乱码如何解决?

    今天想找一下之前的随机数组demo复习,在源文件src里用vim打开.java文件,中文出现乱码 vim也是,选项里没有直接选择设置utf-8之类的 查了下网上,http://easwy.com/bl ...

随机推荐

  1. Python面试题(练习一)

    1.Python的可变类型和不可变类型? 可变类型:list.dict(列表和字典) 不可变类型:数字.字符串.元组 2.求结果: v = dict.fromkeys(['k1','k2'],[]) ...

  2. Flask_单例模式

    在flask实现单例模式的方法有多种: 这里我们列举五种,行吗? 第一种: 国际惯例:基于文件导入 第二种: 基于类的单例模式: 它又分两种: 一种加锁,一种不加锁. 不加锁的话,可以并发,但是我们的 ...

  3. sql server 学习分享

    http://www.cnblogs.com/liu-chao-feng/p/6144872.html

  4. 1章 perl入门

    1.标量数据    单变量    数字和字符串两种情况 2.所有数字的内部格式都相同.浮点型   perl中没有应对整数值得运算   . 3.浮点数直接量 数字e表示10的次方标示符 例子:-6.5e ...

  5. Matlab 二值图像label regions

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52862719 Matlab提供了现成的 ...

  6. 【转】深入理解JVM—JVM内存模型

    http://www.cnblogs.com/dingyingsi/p/3760447.html#3497199 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU ...

  7. onclick跳转到其他页面的几种方式

    如果是本页显示可以直接用location,方法如下: ①onclick="javascript:window.location.href='URL'" ②onclick=" ...

  8. hihoCoder #1349 Nature Numbers

    题目大意 考虑自然数构成的序列 $a$:$01234567891011\dots$,序列下标从 $0$ 开始,即 $a_0 =0, a_1 = 1$ . 求 $a_n$($0\le n\le 10^{ ...

  9. bzoj 3000 Big Number 估算n!在k进制下的位数 斯特林公式

    题目大意 求n!在k进制下的位数 2≤N≤2^31, 2≤K≤200 分析 作为数学没学好的傻嗨,我们先回顾一下log函数 \(\log_a(b)=\frac 1 {log_b(a)}\) \(\lo ...

  10. ASP 500错误解决方法

    最有效的解决方法: 经  c:\windows\temp 目录增加everyone写权限. 环境: windows2008