開頭輸出空行,是utf-8 bom問題。
至於空格,則是在php的?>識別符號後面還有空格或者空行引起的。所以刪除所有在?>後的空格即可,還包括這個php所有include的php。
utf-8 bom問題解決方法:
用ultraedit32把smarty模板檔案即引用的模板檔案(如include的header,footer等檔案)全另存為無bom的utf-8檔案.
其它補充說明:
頁面採用utf8編碼,頭部和尾部用了模板包含文件的method,結果頭部和尾部無端端各多出乙個約10px的空行,什麼也沒有。
原因是全部採用utf8編碼,包含文件的時候,最後的二進位製流中包含了多次utf8 bom標記,ie不能正常解析包含多個utf8 bom 標記的頁面,直接替換成實際顯示的回車,這樣導致乙個空行,而firefox卻沒有這個問題。
故如果模板採用包含的method包含多個utf8文件需要用ultraedit儲存時另存為功能 選擇utf8 無bom格式儲存即可。
另外,如果中文頁面在html head標記中將title標記放在前面會導致頁面空白。
所以utf8頁面應該使用標準順序
bom頭:xefxbbxbf,php指令碼4、5尚對bom無視,所以在解析前直接輸出。
對此 w3.org 標準 faq 中對此問題有乙個專門的描述:
www.w3.org/international/questions/qa-utf8-bom
具體如下:
在ucs 編碼中有乙個叫做」zero width no-break space」的char,它的編碼是feff。而fffe在ucs中是不存在的char,所以不應該出現在實際傳輸中。ucs規範建議我們在傳輸位元組流 前,先傳輸 char」zero width no-break space」。這樣如果接收者收到feff,就表明這個位元組流是big-endian的;如果收到fffe,就表明這個位元組流是little- endian的。因此char」zero width no-break space」又被稱作bom。
utf-8不需要bom來表明位元組順序,但可以用bom來表明編碼方式。char」zero width no-break space」的utf-8編碼是ef bb bf。所以如果接收者收到以ef bb bf開頭的位元組流,就知道這是utf-8編碼了。
1) notepad : 可以自動識別出沒有帶 bom 的 utf-8 編碼格式文件,但不可以控制儲存文件時是否新增 bom , 如果儲存文件,那麼會統一新增 bom 。
2)editplus : 不能自動識別出沒有 bom 的 utf-8 編碼格式文件,文件儲存時,選擇utf-8 格式,不會在文件頭寫上 bom header.
3) ultraedit : 對於char編碼的功能最為強大, 可以自動識別帶 bom 和不帶 bom 的 utf-8 文件 (可以配置) ; 儲存的時候可以通過配置選擇是否新增 bom.
(特別需要注意的是,儲存乙個新建立的文件時,需要選擇另存為 utf-8 no bom 格式)
後來發現 notepad ++ 也對於 utf-8 bom 支援比較好,推薦大家使用。
<?php
//此檔案用於快速測試utf8編碼的檔案是不是加了bom,並可自動移除
$basedir="."; //修改此行為需要檢測的目錄,點表示當前目錄
$auto=1; //是否自動移除發現的bom資訊。1為是,0為否。
//以下不用改動
if ($dh = opendir($basedir))
closedir($dh);
}function checkbom ($filename) else
}else
return (「bom not found.」);
}function rewrite ($filename, $data)
?>
sed刪除空行(包括由空格組成的空行)
sed實戰之 刪除空行 包括由空格組成的空行 首先要隆重介紹我們的測試檔案,因為這是非常特殊的檔案 forrest ubuntu public cat v wuhui.txt 1 m m 2 m m 3 m m 4 m m 5 m m 6 m m m 我用cat v選項,顯示不可見字元。m是換行的意...
Linux系統利用指令碼刪除空行或者空格的方法
1 用tr命令 cat 檔名 tr s n 2 用sed命令 cat 檔名 sed d 3 用awk命令 cat 檔名 awk cat 檔名 awk 4 用grep命令 grep v 檔名 1 刪除行首空格 sed s t g 說明 此種方法是sed命令標準的替換命令操作,以s開頭,g表示全部替換。...
替換字串中的空格和空行
總 a.直接用string.replaceall 替換的話,會連字串裡的n,r,t等字母一起替換掉 b.所以要用正規表示式pattern和matcher類替換 如下 string sfi filter sqlutil.sqlfrommybatis sessionfactory,datasource,...