您的位置:主页 > 新闻动态 > 环亚娱乐平台新闻 >

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

日期:2017-09-09 14:48     来源:未知    作者admin    阅读:
编写或修改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了。
<友情连结> 天祥科技/ 合肥优派信息技术有限公司/ 申泽seo管理系统/ 福建拾方易网络科技有限公司/ 博客西藏/