ultraedit, editplus, notepad 与 UTF-8 BOM 与 PHP

编写或修改php代码后,进行调试时会出现如同以下几点问题:

    –不能登入或者不能登出;
    –页顶出现一条空白;
    –页顶出现错误警告;
    –其它不正常的情况。

分析原因:

   
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB
0xBF,即BOM——Byte Order
Mark)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。

   
    但对于
PHP来说,PHP在设计时就没有考虑BOM的问题,不会忽略UTF-8编码的文件开头BOM的那三个字符,会把BOM作为该文件开头正文的一部分。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码。由于在html一开头有这3个字符的存在,即使页面的
top padding
设置为0,也无法让整个网页紧贴浏览器顶部。由于受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在
COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。

解决办法:

   
在编辑、更改任何文本文件时,请务必使用不会乱加BOM的编辑器。Linux下的编辑器应该都没有这个问题。WINDOWS下,请勿使用记事本等编辑器。推荐的编辑器是:Editplus
2.12版本以上;EmEditor;UltraEdit(需要取消‘添加BOM’的相关选项);Dreamweaver(需要取消‘添加BOM’的相关选项)等。

   
对于已经添加了BOM的文件,要取消的话,可以用以上编辑器另存一次。(Editplus需要先另存为gb,再另存为UTF-8。)

    ultraedit, editplus, notepad四个工具对UTF-8
的支持不相同,下面是对四个工具对UTF-8 支持的总结:
  UTF-8 BOM header: 是三个字符: EF BB
BF。
  1. notepad
        notepad 在保存时,选择UTF-8
格式,会在文件头写上BOM header.
  2. editplus
        文件保存时,选择UTF-8 格式,不会在文件头写上 BOM
header.
  3. ultraedit
        ultraedit 对UTF-8
的支持最为完备。在advanced->configuration中可以   
选择文件保存时是否写上BOM header.
  4. vi
        指的是Linux 下的vim, 如果UTF-8
文件开头有BOM header, 其能够正常显示UTF-8编码,否则,显示为乱码。
  还有一些编码转换工具,比如,可以用java 写一个简单的编码转换工具,这些工具是不会增加BOM header的。


附录:

   
UltreEdit的配置,将选项“保存时对所有UTF-8写入UTF-8文件头标记(BOM)”关闭。即:Write UTF-8 BOM
header to ALL UTF-8 files when saved OFF。
    不同版本有可能没有,而要把“自动检测utf8”关掉。这样看utf8文件就乱码了。
    建议用editplus了。

牢骚:
   
    我被eclipse搞得很郁闷。

欢迎关注我的微信公众号:

 

如无特殊说明,文章均为本站原创,转载请注明出处!

《ultraedit, editplus, notepad 与 UTF-8 BOM 与 PHP》有2个想法

发表回复

您的电子邮箱地址不会被公开。