浏览器预览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+DBM的同学录程序(3)
Oct 09 PHP
PHP中,文件上传
Dec 06 PHP
PHP 中dirname(_file_)讲解
Mar 18 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
Yii2如何批量添加数据
May 17 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
php实现的表单验证类完整示例
Aug 13 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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分页类
2013/10/26 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
如何在python中使用selenium的示例
2017/12/26 Python
python实现日常记账本小程序
2018/03/10 Python
Python应用库大全总结
2018/05/30 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
如何手工释放资源
2013/12/15 面试题
大学生求职自我评价
2014/01/16 职场文书
学习交流会主持词
2014/04/01 职场文书
婚礼新人答谢词
2015/01/04 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
中学教代会开幕词
2016/03/04 职场文书
八年级作文之友情
2019/11/25 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python