background image

PHP 网页 UTF8 编码开发中空白的问题

开发中一直没办法解决的一个问题
  页面采用

UTF8 编码,头部和尾部用

模板

含文件的方法,结果头部和尾部无端端

各多出一个约

10px 的空行,什么也没有。

  原因是全部采用

utf8 编码,包含文件的时候,最后的二进制流中包含了多次 UTF8 

BOM 标记,IE 不能正常解析包含多个 UTF8 BOM 标记的页面,直接替换成实际显示的回
车,这样导致一个空行,而

Firefox

却没有这个问题。

  故如果模板采用包含的方法包含多个

utf8 文件需要用 ultraedit 保存时另存为功能 选择

utf8 无 bom 格式保存即可。
  另外,如果中文页面在

html head 标记中将 title 标记放在<meta http-equiv=”content-

type” content=”text/html; charset=UTF-8″ />前面会导致页面空白。
  所以

utf8 页面应该使用标准顺序

<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ />
<meta http-equiv=”content-language” content=”zh-CN” />
<meta name=”robots” content=”index,follow” />
<meta name=”key

Word

s” content=”" />

<meta name=”descr

ip

tion” content=”" />

<meta name=”rating” content=”general” />
<meta name=”author” content=”" />
<meta name=”copyright” content=”" />
<meta name=”generator” content=”" />
<title></title>
BOM 头:\xEF\xBB\xBF

php

4、5 尚对 BOM 无视,所以在解析前直接输出。

对此

 w3.org 标准 FAQ 中对此问题有一个专门的描述:

http://www.w3.org/International/questions/qa-utf8-bom

具体如下

:

UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是 FEFF。

FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。UCS 规范建议我们在

传输字节流前,先传输字符

”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到

FEFF,就表明这个字节流是 Big-Endian 的;如果收到 FFFE,就表明这个字节流是 Little- 
Endian 的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作 BOM。
UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符”ZERO WIDTH 
NO-BREAK SPACE”的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的
字节流,就知道这是

UTF-8 编码了。

Windows 就是使用 BOM 来标记文本文件的编码方式

操作系统

: WindowsXP 

PR

ofessional , 

缺省字符集:中文
1) notepad : 可以自动识别出没有带 bom 的 utf-8 编码格式文件,但不可以控制保存文件
时是否添加

 bom , 如果保存文件,那么会统一添加 bom 。

2)editplus : 不能自动识别出没有 bom 的 utf-8 编码格式文件,文件保存时,选择 UTF-8 
格式,不会在文件头写上

 BOM header.

3) UltraEdit : 对于字符编码的功能最为强大, 可以自动识别带 bom 和不带 bom 的 utf-8 
文件

 (可以配置) ; 保存的时候可以通过配置选择是否添加 bom.

(特别需要注意的是,保存一个新建立的文件时,需要选择另存为

 utf-8 no bom 格式)

后来发现

 Notepad ++ 也对于 utf-8 bom 支持比较好,推荐大家使用。