通常情況下,我都會使用Windows系統自帶的記事本程序編寫網頁程序,但在編寫或修改php博客系統代碼后,進行調試時總是會出現如同以下幾點問題:
--不能登入或者不能登出;
--頁頂出現一條空白;
--頁頂出現錯誤警告;
--其它不正常的情況。
分析原因:
由于本人習慣使用UTF-8編碼,在編寫或修改代碼后都保存為utf-8編碼格式。雖然現在幾乎所有的文本編輯軟件都可以顯示并編輯UTF-8編碼的文件,但是很遺憾的是其中很多軟件的表現并不理想。
類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM——Byte Order Mark)。它是一串隱藏的字符,用于讓記事本等編輯器識別這個文件是否以UTF-8編碼。對于一般的文件,這樣并不會產生什么麻煩。但對于 PHP來說,PHP在設計時就沒有考慮BOM的問題,不會忽略UTF-8編碼的文件開頭BOM的那三個字符,會把BOM作為該文件開頭正文的一部分。由于必須在<?或者<?php后面的代碼才會作為PHP代碼執行,所以將會造成在頁面上輸出這三個字符,顯示效果就要看瀏覽器了,一般是一個空行或是一個亂碼。由于在html一開頭有這3個字符的存在,即使頁面的 top padding 設置為0,也無法讓整個網頁緊貼瀏覽器頂部。由于受COOKIE送出機制的限制,在這些文件開頭已經有BOM的文件中,COOKIE無法送出(因為在 COOKIE送出前PHP已經送出了文件頭),所以登入和登出功能失效。一切依賴COOKIE、SESSION實現的功能全部無效。
解決辦法:
在編輯、更改任何文本文件時,請務必使用不會亂加BOM的編輯器。Linux下的編輯器應該都沒有這個問題。WINDOWS下,請勿使用記事本等編輯器。推薦的編輯器是:
Editplus 2.12版本以上;
EmEditor;
UltraEdit(需要取消‘添加BOM’的相關選項);
Dreamweaver(需要取消‘添加BOM’的相關選項)
等。
對于已經添加了BOM的文件,要取消的話,可以用以上編輯器另存一次。(Editplus需要先另存為gb,再另存為UTF-8。)或者,用這個程序(PHP版本4.3以上)
--不能登入或者不能登出;
--頁頂出現一條空白;
--頁頂出現錯誤警告;
--其它不正常的情況。
分析原因:
由于本人習慣使用UTF-8編碼,在編寫或修改代碼后都保存為utf-8編碼格式。雖然現在幾乎所有的文本編輯軟件都可以顯示并編輯UTF-8編碼的文件,但是很遺憾的是其中很多軟件的表現并不理想。
類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM——Byte Order Mark)。它是一串隱藏的字符,用于讓記事本等編輯器識別這個文件是否以UTF-8編碼。對于一般的文件,這樣并不會產生什么麻煩。但對于 PHP來說,PHP在設計時就沒有考慮BOM的問題,不會忽略UTF-8編碼的文件開頭BOM的那三個字符,會把BOM作為該文件開頭正文的一部分。由于必須在<?或者<?php后面的代碼才會作為PHP代碼執行,所以將會造成在頁面上輸出這三個字符,顯示效果就要看瀏覽器了,一般是一個空行或是一個亂碼。由于在html一開頭有這3個字符的存在,即使頁面的 top padding 設置為0,也無法讓整個網頁緊貼瀏覽器頂部。由于受COOKIE送出機制的限制,在這些文件開頭已經有BOM的文件中,COOKIE無法送出(因為在 COOKIE送出前PHP已經送出了文件頭),所以登入和登出功能失效。一切依賴COOKIE、SESSION實現的功能全部無效。
解決辦法:
在編輯、更改任何文本文件時,請務必使用不會亂加BOM的編輯器。Linux下的編輯器應該都沒有這個問題。WINDOWS下,請勿使用記事本等編輯器。推薦的編輯器是:
Editplus 2.12版本以上;
EmEditor;
UltraEdit(需要取消‘添加BOM’的相關選項);
Dreamweaver(需要取消‘添加BOM’的相關選項)
等。
對于已經添加了BOM的文件,要取消的話,可以用以上編輯器另存一次。(Editplus需要先另存為gb,再另存為UTF-8。)或者,用這個程序(PHP版本4.3以上)