php文件代码采用UTF-8编码的BOM问题---转自CSDN---十方地藏---http://blog.csdn.net/webdesman...
一個項目,代碼編碼均為utf-8編碼,發現問題:在使用session的時候報錯,錯誤如下: -------------------------------------------------
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ......
-------------------------------------------------
那么表示在session前頭有輸出了,可是前面看起來沒有什么輸出,后經搜索發現原因如下:
用記事本編輯后,保存為utf-8編碼的代碼文件最前面會有BOM信息,而BOM信息是文件開頭的一串隱藏的字符,用于讓某些編輯器識別這是個UTF-8編碼的文件。
?
PHP在設計時就沒有考慮BOM的問題,也就是說他不會忽略UTF-8編碼的文件開頭BOM的那三個字符(十六進制下查看是以EF BB BF開頭)。
?
所以當用記事本或DW(DW編碼為utf8)打開該文件時,前面什么都沒有,看不到。
?
但是實際上有BOM信息輸出,而php的session前面不允許有輸出,所以報錯。
?
又測試:
Zend Studio v5.5.1(編碼為utf-8)打開該文件,會看到有個芝麻點,刪除它,session能正常獲取了(但記事本再打開,選‘另存為’,會發現編碼是ANSI了);
Zend Studio v5.5.1(編碼為default)打開該文件,會看到有個“锘�1�7”,刪除它,session也能正常獲取了(同樣的,記事本再打開,選‘另存為’,會發現編碼是ANSI了);
?
?
?
【解決的辦法】:
(1)如果只包含英文字符(或者說ASCII編碼內的字符,即ANSI),就把文件存成ASCII碼方式吧。用UE等編輯器的話,點文件->轉換->UTF-8轉ASCII,或者在另存為里選擇ASCII編碼。如果是DOS格式的行尾符,可以用記事本打開,點另存為,選ASCII編碼。
?
(2)如果包含中文字符的話——————
A.直接用Zend Studio v5.5.1(編碼為utf-8)打開該文件,刪除前面的芝麻點,保存,OK。(我認為的最佳解決辦法!)
B.可以用UltraEdit32的另存為功能,選擇“UTF-8 無 BOM”即可。
值得注意的是:這個時候你再用記事本打開該文件,選擇另存為,你會看到該文件的編碼是“ANSI”!!!為什么?因為沒有BOM信息了,記事本不認識它是UTF-8的了!(詭異的是:如果你的代碼有中文注釋,你用UltraEdit32的另存為功能,選擇“UTF-8 無 BOM”,保存,再用記事本打開,選擇另存為......你會發現該文件的編碼是UTF-8了!!!)。這種情況沒關系,跟多老外的程序源碼的編碼都是ANSI , 我建議使用UTF-8是考慮到通用性——非洲人民可用、亞洲人民可用、歐洲人民可用...全世界人民都可用。
?
原文鏈接:http://blog.csdn.net/webdesman/article/details/5927283
轉載于:https://www.cnblogs.com/bullz/archive/2012/04/27/2473157.html
總結
以上是生活随笔為你收集整理的php文件代码采用UTF-8编码的BOM问题---转自CSDN---十方地藏---http://blog.csdn.net/webdesman...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态路由选择协议简介
- 下一篇: 如何利用SEO做好网站推广