浏览器预览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缓存技术介绍
Nov 25 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
php的hash算法介绍
Feb 13 PHP
合格的PHP程序员必备技能
Nov 13 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
javascript中Object使用详解
2015/01/26 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Python画图高斯分布的示例
2019/07/10 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Python可以实现栈的结构吗
2020/05/27 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
新闻学专业应届生求职信
2013/11/08 职场文书
电脑教师的自我评价
2013/12/18 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
大学生实训报告总结
2014/11/05 职场文书
2015年见习期工作总结
2014/12/12 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
Go语言基础map用法及示例详解
2021/11/17 Golang
MySQL添加索引特点及优化问题
2022/07/23 MySQL