zoukankan      html  css  js  c++  java
  • 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字符,它位于文档的最开始。

  • 相关阅读:
    ultraedit 窗口布局
    Oracle之Char VarChar VarChar2
    Python之pickle
    Python之xpath
    Python常用数据结构之heapq模块
    Python实现排序算法之快速排序
    Python常用数据结构之collections模块
    New York is 3 hours ahead of California
    leetcode978
    leetcode979
  • 原文地址:https://www.cnblogs.com/bluecobra/p/2379656.html
Copyright © 2011-2022 走看看