浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法


Posted in PHP onJanuary 11, 2013

在编写PHP文件过程中,发现在浏览器预览PHP文件时,顶部会出现一行空白,影响了页面的布局。

关于BOM header的解释如下

通常情况下,使用Windows系统自带的记事本程序编写网页程序,但在编写或修改php博客系统代码后,进行调试时总是会出现如同以下几点问题:

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

分析原因
由于使用UTF-8编码,在编写或修改代码后都保存为utf-8编码格式。虽然现在几乎所有的文本编辑软件都可以显示并编辑UTF-8编码的文件,但是很遗憾的是其中很多软件的表现并不理想。

类 似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'的相关选项);
Notepad(需要进行“转换为不带BOM的UTF-8”)等。

对于已经添加了BOM的文件,要取消的话,可以用以上编辑器另存一次。(Editplus需要先另存为gb,再另存为UTF-8。Dreamweaver在”页面属性“的 “包含Unicode 签名(BOM)”取消即可)

PHP 相关文章推荐
php二分法在IP地址查询中的应用
Aug 12 PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
PHP中如何定义和使用常量
Feb 28 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
laravel实现于语言包的完美切换方法
Sep 29 PHP
php实现商城购物车的思路和源码分析
Jul 23 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 #PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 #PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 #PHP
PHP编程函数安全篇
Jan 08 #PHP
php中定时计划任务的实现原理
Jan 08 #PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 #PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 #PHP
You might like
谈谈PHP语法(5)
2006/10/09 PHP
php使用正则验证中文
2016/04/06 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
用Python制作简单的钢琴程序的教程
2015/04/01 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
python实现门限回归方式
2020/02/29 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
大学军训感言1000字
2014/02/25 职场文书
初中生操行评语大全
2014/04/24 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
三方股东合作协议书
2014/10/28 职场文书
离婚协议书范本
2015/01/26 职场文书