浏览器预览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+MySQL 手工注入语句大全 推荐
Oct 30 PHP
PHP 分页原理分析,大家可以看看
Dec 21 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
php rsa 加密,解密,签名,验签详解
Dec 06 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
php数组指针操作详解
Feb 14 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
浅析php单例模式
2014/11/25 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
javascript 函数参数限制说明
2010/11/19 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
python选择排序算法实例总结
2015/07/01 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
python requests证书问题解决
2019/09/05 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
高中综合实践活动总结
2014/07/07 职场文书
2014年医生工作总结
2014/11/21 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
高三生物教学反思
2016/02/22 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
DSP接收机前端设想
2022/04/05 无线电
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技