浏览器预览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数据库连接
Oct 09 PHP
深入PHP变量存储的详解
Jun 13 PHP
解析yii数据库的增删查改
Jun 20 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
PHP框架性能测试报告
May 08 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
laravel实现简单用户权限的示例代码
May 28 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的switch判断语句的“高级”用法详解
2014/10/01 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
stripos函数知识点实例分享
2019/02/11 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
javascript的事件描述
2006/09/08 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
详解Python with/as使用说明
2018/12/13 Python
python中web框架的自定义创建
2019/09/08 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
Python中Selenium库使用教程详解
2020/07/23 Python
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
标记环介质访问控制协议
2016/03/27 面试题
电大会计学自我鉴定
2014/02/06 职场文书
六五普法规划实施方案
2014/03/21 职场文书
供应商食品安全承诺书
2015/04/29 职场文书