今天在作一個項目時候,用include語句包含文件。在雲服務器上測試正常,在虛擬主機上老是多了莫名奇妙的換行符或者空格符。問題以下:
通過排查發現問題出如今包含文件的頁面編碼上:被包含文件的編碼是 utf-8+bom編碼方式存儲。將文件轉化成utf-8無bom的編碼格式就好;
下面這次問題排查中學習到的東西,總結以下:php
BOM是用來判斷文本文件是哪種Unicode編碼的標記,其自己是一個Unicode字符("\uFEFF"),位於文本文件頭部。UTF-8實際上包含兩種格式:UTF-8 無BOM 類型 與 UTF-8 有BOM 類型。題主恰好使用的是有bom的的類型。事實上在UTF-16 UTF-32中一樣分帶有BOM及無BOM兩種.html
BOM其實是很是有用的前綴。可是在服務器點對點溝通解析或者網頁展現中某些狀況下倒是多餘或者說是會帶來「麻煩」的。例如會在頁頭增長以下所示的亂碼字符:」「鍩?」瀏覽器
1.例如咱們把幾個JS文件合併成一個文件後,若是文件中間含有BOM字符,就會致使瀏覽器JS語法錯誤。服務器
2.PHP就不能識別bom頭,PHP並不會忽略BOM,因此在讀取、包含或者引用這些文件時,會把BOM做爲該文件開頭正文的一部分。根據嵌入式語言的特色,這串字符將被直接執行(顯示)出來。由此形成即便頁面的 top padding 設置爲0,也沒法讓整個網頁緊貼瀏覽器頂部,由於在html一開頭有這3個字符呢!編輯器
我使用editplus編輯器進行轉化,具體以下,選文檔(Document)菜單——文件編碼(File encoding)——批量轉換編碼(File encoding multiple),選中所有文件後轉碼,而後再所有保存。ide
1.要查清本身自己有沒有echo 或者exit空格或者換行,
2.必定要保證php文件裏<?php ?>標籤外沒有多餘的回車,換行。若是是純粹的php腳本文件,請刪除腳本後面結束標記
3.這些都排查了以後,若是是utf8編碼的文件,還會輸出一個多餘的空格回車。作xml傳輸時常常死在這多餘的空白上面。這是因爲BOM文件頭形成的。另存爲無BOM的文件便可。學習