UTF8编码中的BOM字符 引起Session/Cookies失效

问题症状:
  UTF-8编码的PHP网页输出有意外的空行,Session/Cookies失效。
  在Linux下Vi问题文件时,发现文件开头多出一个<FFFE>字符。
  非常困惑的一个问题。
问题根源:
  UTF-8编码中有一个“Zero Width NO-BREAK Space”字符,字符编码为FEFF。在传输实际的UTF-8编码文件内容之前,会先传输字符“Zero Width NO-BREAK Space”,该字符用来标识接下来的数据流使用何种存放顺序(即:Big-Endian(高位存于低地址) 或者 Little-Endian(低位存于低地址),关于这两种字节存储顺序请参考别的文章吧,好像说的是Big-Endian是基于IBM/RISC/Motorola处理器的系统采用的字节存放顺序,而基于Inter处理器的系统则多采用Little-Endian存放顺序),当字节流为Big-Endian方式存放时,“Zero Width NO-BREAK Space”为FEFF,当字节流为Little-Endian方式时,“Zero Width NO-BREAK Space”为FFFE。而FFFE在Unicodes标准中是不存在的,所以,在网页中会出现莫名其妙的空白字符(因为不存在嘛,哈哈...),所以,在传输的时候我们可以将这个字符去掉,如果某些情况一定需要“Zero Width NO-BREAK Space”字符时另当别论。
  因为“Zero Width NO-BREAK Space”可以标识字节流动存储顺序,因此在很多时候我们都把它称为Byte Order Mark(BOM)字符。
 
  OK,问题的根源找到了,如何解决呢?
  非常简单,哈哈,用我们的老朋友UltraEdit就可以了!
  具体操作:
    用UltraEdit打开文件,然后”另存为...“,在对话框中选择一下另存为的格式为”UTF-8 NO BOM“,大功告成!!!
    说明一下:使用UltraEdit时可以用十六进制的方式查看到这个BOM字符,它位于文档的最开始。

原文地址:https://www.cnblogs.com/bluecobra/p/2379656.html