浏览器预览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 相关文章推荐
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
Jan 07 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
调整PHP的性能
Oct 30 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
PHP设置images目录不充许http访问的方法
Nov 01 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP实现的多维数组排序算法分析
Feb 10 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
晶体管来复再生式二管收音机
2021/03/02 无线电
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
用PHP代码给图片加水印
2015/07/01 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
Angularjs 基础入门
2014/12/26 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
使用Python实现一个简单的项目监控
2015/03/31 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
python and or用法详解
2019/06/26 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
企业军训感想
2014/02/07 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
Oracle用户管理及赋权
2022/04/24 Oracle
python如何将mat文件转为png
2022/07/15 Python