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字符,它位于文档的最开始。

  • 相关阅读:
    所谓经济现象
    高旻寺德林老和尚开示
    3Delight NSI: A Streamable Render API
    Play vue.js with constant value in SailsJS
    天魔心法之——识人篇
    对国内IoT的展望
    对国内AR产业的预言
    简评某中国工程师嫌疑窃取苹果自动驾驶技术
    评估人类的金三角模型
    Odoo 进销存报表现已开源
  • 原文地址:https://www.cnblogs.com/bluecobra/p/2379656.html
Copyright © 2011-2022 走看看