PHP+Smarty模板中CSS問題:Firefox下正常顯示,而在IE下,顯示得很混亂

第一個緣由是:bom的問題(在頁面上輸出空信息)
[轉]
先製做好了頁面的模板(用UTF-8編碼),當載入Smarty運行的時候,發如今Firefox下正常顯示,而在IE下,顯示得很混亂!難道 是smarty和CSS結合有問題?PHP+Smarty時顯示混亂,而不用Smarty轉而採用原始的PHP+HTML混寫的時候則無此現象,查閱代 碼,沒法找出任何破綻,所以開始懷疑Smarty有問題。

根據以往的經驗,我開始懷疑是當PHP輸出HTML的時候向其中加入了額外的不可見代碼,因而將PHP輸出的內容原封不動保存爲HTML,而後提交到  validator.w3.org這個網站頗有用,能夠幫你檢測html的錯誤信息]進行XHTML驗證,果真,驗證失敗,提示文件頭部被加入了BOM(萬國碼檔案簽名:Byte Order Mark, U+FEFF)標記,媽的,就是這個垃圾標記,已經不是第一次害我了!

因而,從新打開DM和UltraEdit從新對PHP頁面以及模板頁面進行編碼轉換,去除了其中的BOM標記,一切正常!
         解決此問題的最簡單的方法是:把原來的模板文件及php文件用 UltraEdit 打開,而後從新保存時選擇 UTF-8-無BOM格式便可。呵呵,是否是很簡單呢。這是我在建個人小站:創意產品網 www.cygoods.com  過程當中遇到的問題,記錄下來,但願能對遇到一樣問題的人有所幫助。
切記把所的文件都進行相應轉換
這裏附上一篇寫的很全面的有關BOM的文章,但願能幫助和我同樣受害的人。

=================================================================
utf-8 保存文件的 bom 問題你們都知道 utf-8 是一種在web應用中常用的一種 unicode 字符的編碼方式,使用 utf-8 的好處在於它是一種變長的編碼方式,對於 ANSII 碼編碼長度爲1個字節,這樣的話在傳輸大量 ASCII 字符集的網頁時,能夠大量節約網絡帶寬。

不過若是你們使用 utf-8 編碼來編寫網頁的時候, 每每會由於 bom (Byte Order Mark) 的問題,致使網頁中常常出現一些不明的空行或者亂碼字符。 這些都是由於 utf-8 編碼方式對於 bom 不是強制的。所以 utf-8 編碼在保存文件的時候,會出現不一樣的處理方式。php

好比有的瀏覽器(FireFox)能夠自動過濾掉全部 utf-8 bom , 有的 (IE) 只能過濾掉一次 bom (爲何是一次? 當你出現 Include 屢次文件時就會碰上這個問題了:) );html

對此 w3.org 標準 FAQ 中對此問題有一個專門的描述:web

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

在此我的認爲對於這個問題最好的處理方式就是在編輯(保存)文件的時候統一去除 utf-8 bom , 同時又必須使得編輯器能夠正確讀出 utf-8 字符集,但惋惜目前 windows 系統中對於保存文件的處理方式缺省情款下都會自動加上 bom.瀏覽器

(經過抓包工具分析, google 中文頁面統一使用 utf-8 編碼方式,下載的頁面中沒有帶有 bom 標識)服務器

操做系統: WindowsXP Professional , 缺省字符集:中文網絡

1) notepad : 能夠自動識別出沒有帶 bom 的 utf-8 編碼格式文件,但不能夠控制保存文件時是否添加 bom , 若是保存文件,那麼會統一添加 bom 。編輯器

2)editplus : 不能自動識別出沒有 bom 的 utf-8 編碼格式文件,保存文件爲 utf-8 時會自動添加 bom工具

3) UltraEdit : 對於字符編碼的功能最爲強大, 能夠自動識別帶 bom 和不帶 bom 的 utf-8 文件 (能夠配置) ; 保存的時候能夠經過配置選擇是否添加 bom.網站

(特別須要注意的是,保存一個新創建的文件時,須要選擇另存爲 utf-8 no bom 格式)

後來發現 Notepad ++ 也對於 utf-8 bom 支持比較好,推薦你們使用。

 

第二個:設置不顯示Notice

首先,這個不是錯誤,是warning。因此若是服務器不能改,每一個變量使用前應當先定義。 

方法1:服務器配置修改 
修改php.ini配置文件,error_reporting = E_ALL & ~E_NOTICE 

方法2:對變量進行初始化,規範書寫(比較煩瑣,由於有大量的變量)。但尚未找到好定義方法,望你們指教 

方法3:每一個文件頭部加上:error_reporting(0); 若是不行,只有打開php.ini,找到display_errors,設置爲display_errors = Off。之後任何錯誤都不會提示。

總結:

如果有bom就是用第二個設置了不顯示Notice也會出現樣式亂的狀況,因此最根本的仍是解決掉bom

相關文章
相關標籤/搜索