浏览器预览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 相关文章推荐
请离开include_once和require_once
Jul 18 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
php中adodbzip类实例
Dec 08 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 PHP
thinkphp分页实现效果
Oct 13 PHP
php生成与读取excel文件
Oct 14 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
关于php开启错误提示的总结
Sep 24 PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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和ACCESS写聊天室(三)
2006/10/09 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
校运动会广播稿300字
2014/10/07 职场文书
考试作弊检讨书
2015/01/27 职场文书
施工安全员岗位职责
2015/04/11 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书