浏览器预览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 相关文章推荐
开源SNS系统-ThinkSNS
May 18 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
PHP中的float类型使用说明
Jul 27 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php递归实现无限分类的方法
Jul 28 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
幼儿园春季开学寄语
2014/04/03 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
硕士论文致谢范文
2015/05/14 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫