浏览器预览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 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
PHP缓存技术的使用说明
Aug 06 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
php中常用的预定义变量小结
May 09 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
PHP实现递归无限级分类
Oct 22 PHP
CodeIgniter生成静态页的方法
May 17 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 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/06/02 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
Python 学习笔记
2008/12/27 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python实现俄罗斯方块游戏
2020/03/25 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
python交易记录整合交易类详解
2019/07/03 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
python从Oracle读取数据生成图表
2020/10/14 Python
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
高三自我评价
2014/02/01 职场文书
销售内勤岗位职责
2014/04/15 职场文书
诚信考试标语
2014/06/24 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android