首先我要說也許您已經知道的很多事情,所有的 phpBB3 之 php 檔案需要儲存成 UTF-8 不含 BOM 的檔案編碼。
大多數的人不明白「不含 BOM」是什麼意思,或者是不瞭解「BOM」是什麼。
因此我先得解釋 BOM 是什麼,以及接著說明它如何導致問題,以及如何去避免這些問題。
BOM 是什麼?
您不必完全精確地瞭解 BOM 是什麼,但是對於引言中維基百科所提到的,可以有初步的認識。
當檔案被以包含 BOM 儲存時,有一個萬國字元插入到檔案的起點,而大多數的文字編輯器將不會顯示,所以您看不見它。維基百科 寫: A byte-order mark (BOM) is the Unicode character at code point U+FEFF ("zero-width no-break space")
when that character is used to denote the endianness of a string of UCS/Unicode characters encoded in UTF-16 or UTF-32. It is conventionally used as a marker to indicate that text is encoded in UTF-8, UTF-16 or UTF-32.
為什麼這是一個問題?
當涉及處理 UTF-8 字元和編碼時,php (非 phpBB) 當作一項規則仍然是粗劣的。
基於這個理由,php 引擎不知如何處理 php 檔案起點的 BOM 字元,因而將它視為一般的文字區塊。
很重要的,在許多的 phpBB3 檔案中,在標籤「<?php」和「?>」之外,是不容許有其他東西的。
因此,在標題被送出之前,是沒有東西輸出到瀏覽器的。
典型的例子是當人們必須建立新的 config.php 檔案,而意外地留下一個空格在標籤「<?php」之前。
這將導致錯誤,如下:
代碼: 選擇全部
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3729: Cannot modify header information - headers already sent by (output started at /config.php:1)
就好比是,如果您在標籤「<?php」之前鍵入一些文字、留一個空格、或者是空一行,那麼都將導致錯誤一樣。
這個問題似乎最常發生在編輯 phpBB3 語言檔案時,儲存它們為 UTF-8 包含 BOM 編碼。
這將導致頁面上頭出現類似的錯誤,或者是根據已編輯的檔案引起其他的問題,例如確認代碼無法正常運作。
如何正確地儲存檔案?
一般而言,您應該總是使用好的文字編輯器來編輯您的檔案。
這其中並不含 notepad 或 wordpad,由於某些原因,當檔案被儲存為 UTF-8 時,微軟設計它們會自動加入 BOM。
我將以紅色字再強調一次。不要用微軟的 notepad 或 wordpad 來編輯 phpBB3 檔案。
經常被推薦用來編輯 phpBB3 檔案的文字編輯器是 Notepad plus 或 Notepad++。
這是一個以 GPL 授權之免費的文字編輯器。
使用 Notepad++ 要編輯以及正確地儲存檔案,您需要點選上頭選單「Format」『編碼』,如下圖。 這將給您一個下拉式編碼選單去選擇。
在選單中,您需要選擇「Encode in UTF-8 without BOM」『編譯成 UTF-8 碼(檔首無 BOM)』,一旦設定這個選項,您就可以正常地編輯和儲存您的檔案。
如果您使用不同的編輯器,那麼您很可能找到類似的方法,去選擇儲存不同的編碼。
當儲存檔案時,您極有可能需要使用到「另存檔案」的選項。
在大多數情形下,將給您一個有下拉式選單的彈出式視窗,可以選擇儲存檔案之編碼。
如果選單中沒有「UTF-8 不含 BOM」的選項,那麼您應該參考編輯器的說明文件,以獲得相關的指示。
如果我儲存了錯誤的編碼會怎樣?
雖然,如果檔案被儲存了錯誤的編碼,那麼您可以使用編輯器的選項去轉換編碼為 UTF-8 不含 BOM。
不過,我還沒有遇到有人成功。因此,如果您已經犯了儲存錯誤編碼的錯誤,那這個檔案可能已經損壞而無法修復。
這個意思是您將必須以全新的 phpBB3 下載檔案取代之,然後重新編輯您修改過的檔案。
重新編輯後,一定要儲存正確的 UTF-8 不含 BOM 編碼。
--
資料來源:
http://www.phpbb.com/kb/article/phpbb3- ... thout-bom/