浏览器预览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数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
php的array_multisort()使用方法介绍
May 16 PHP
PHP+javascript制作带提示的验证码源码分享
May 28 PHP
php程序内部post数据的方法
Mar 31 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
Yii2中Restful API原理实例分析
Jul 25 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
PHP _construct()函数讲解
Feb 03 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 PHP
PHP中->和=>的意思
Mar 31 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
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
Python的迭代器和生成器
2015/07/29 Python
python文本数据相似度的度量
2018/03/12 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
白色公司:The White Company
2017/10/11 全球购物
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
给市场的环保建议书
2014/05/14 职场文书
大专学生求职信
2014/07/04 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书