• php文件代码采用UTF8编码的BOM问题转自CSDN十方地藏http://blog.csdn.net/webdesman


    一个项目,代码编码均为utf-8编码,发现问题:在使用session的时候报错,错误如下: -------------------------------------------------

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ......

    -------------------------------------------------

    那么表示在session前头有输出了,可是前面看起来没有什么输出,后经搜索发现原因如下:

    用记事本编辑后,保存为utf-8编码的代码文件最前面会有BOM信息,而BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。

    PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符(十六进制下查看是以EF BB BF开头)。

    所以当用记事本或DW(DW编码为utf8)打开该文件时,前面什么都没有,看不到。

    但是实际上有BOM信息输出,而php的session前面不允许有输出,所以报错。

    又测试:

    Zend Studio v5.5.1(编码为utf-8)打开该文件,会看到有个芝麻点,删除它,session能正常获取了(但记事本再打开,选‘另存为’,会发现编码是ANSI了);

    Zend Studio v5.5.1(编码为default)打开该文件,会看到有个“锘�1�7”,删除它,session也能正常获取了(同样的,记事本再打开,选‘另存为’,会发现编码是ANSI了);

    【解决的办法】:

    (1)如果只包含英文字符(或者说ASCII编码内的字符,即ANSI),就把文件存成ASCII码方式吧。用UE等编辑器的话,点文件->转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。

    (2)如果包含中文字符的话——————

    A.直接用Zend Studio v5.5.1(编码为utf-8)打开该文件,删除前面的芝麻点,保存,OK。(我认为的最佳解决办法!)

    B.可以用UltraEdit32的另存为功能,选择“UTF-8 无 BOM”即可。

    值得注意的是:这个时候你再用记事本打开该文件,选择另存为,你会看到该文件的编码是“ANSI”!!!为什么?因为没有BOM信息了,记事本不认识它是UTF-8的了!(诡异的是:如果你的代码有中文注释,你用UltraEdit32的另存为功能,选择“UTF-8 无 BOM”,保存,再用记事本打开,选择另存为......你会发现该文件的编码是UTF-8了!!!)。这种情况没关系,跟多老外的程序源码的编码都是ANSI , 我建议使用UTF-8是考虑到通用性——非洲人民可用、亚洲人民可用、欧洲人民可用...全世界人民都可用。

    原文链接:http://blog.csdn.net/webdesman/article/details/5927283

  • 相关阅读:
    IOS -- 获取本地图片和网络图片的大小size
    xib中的label加边框
    iOS开发之Masonry框架源码深度解析
    10分钟搭建 App 主流框架
    卸载服务器GitLab
    linux安装git方法
    虚拟机安装centos7, 再安装gitlab 简单步骤
    collectionView 防止cell复用的方法
    UIButton 设置图片文字垂直居中排列
    button获取验证码60秒倒计时 直接用
  • 原文地址:https://www.cnblogs.com/bullz/p/2473157.html
Copyright © 2020-2023  润新知