浏览器预览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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
php记录代码执行时间(实现代码)
Jul 05 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
简单说说PHP优化那些事(经验分享)
Nov 27 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
PHP PDOStatement::bindValue讲解
Jan 30 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
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中url函数介绍及使用示例
2014/02/13 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
Python的print用法示例
2014/02/11 Python
简单了解什么是神经网络
2017/12/23 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
Python自动化操作实现图例绘制
2020/07/09 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
shell程序中如何注释
2012/02/17 面试题
实习生个人找工作的自我评价
2013/10/30 职场文书
学生干部的自我评价分享
2014/01/18 职场文书
2014村务公开实施方案
2014/02/25 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
Python使用永中文档转换服务
2022/05/06 Python