浏览器预览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 cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
使用Sphinx对索引进行搜索
Jun 25 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP回调函数与匿名函数实例详解
Aug 16 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备份数据库类分享
2015/04/14 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
简单上手Python中装饰器的使用
2015/07/12 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python选课系统开发程序
2016/09/02 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
《搭石》教学反思
2014/04/07 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
领导干部对照检查材料
2014/08/24 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL