Jul 20 2007

IE中PHP + Smarty + UTF-8字符编码造成CSS的混乱

Posted by neio

Tags: , , , ,

[for web developers]今天在用 PHP + Smarty 写动态网页的时候发现,UTF-8的Unicode签名BOM (即十六进制中的 “EF BB BF “)会影响CSS,IE 6和 IE 7 都会受影响。

例如 margin: 0px auto; 的样式就会受到影响。

进一步还发现,开头只有一个BOM 的时候显示还是正常,一旦多于1个这样的字符串的时候样式就会混乱。

所以,平时如果不用Smarty的话,用PHP 即使输出了 BOM 十六进制流, 也不会对CSS造成任何影响,然而用 PHP + Smarty + UTF-8字符编码的时候,因为出现了不止一个的 BOM 流,就出现了混乱了。

解决办法是将所有的 PHP,HTML模版前面的BOM去掉就行。

如果不知道怎么做,我这里可以提供一个方法: EmEditor 打开那个文件,另存为的时候,将BOM框去掉选择,再保存就行。

或者用十六进制编辑器 比如HEdit , UE等,直接把前面三个自己删除就行。

名词解释:

A Byte Order Mark (BOM) is the character at code point U+FEFF (”zero-width no-break space”), when that character is used to denote the endianness of a string of UCS/Unicode characters encoded in UTF-16 or UTF-32 and/or as a marker to indicate that text is encoded in UTF-8, UTF-16 or UTF-32. [link]

Filed under : Worklog, 汉语 | No Comments »