浏览器预览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 遍历文件实现代码
May 04 PHP
php 数组使用详解 推荐
Jun 02 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php轻松实现文件上传功能
Mar 03 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
PHP二维数组分页2种实现方法解析
Jul 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
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
2014/09/22 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
python爬取抖音视频的实例分析
2021/01/19 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
十一个高级MySql面试题
2014/10/06 面试题
酒店管理毕业生自荐信
2014/05/25 职场文书
关爱残疾人标语
2014/06/25 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL