phpBB3 以及 UTF-8 不含 BOM

與 phpBB 3.0.x 相關主題。
回覆文章
頭像
心靈捕手
默默耕耘的老師
默默耕耘的老師
文章: 8621
註冊時間: 2004-04-30 01:54
來自: Taiwan

phpBB3 以及 UTF-8 不含 BOM

文章 心靈捕手 » 2010-06-01 22:06

phpBB3 檔案以及 UTF-8 檔案編碼
首先我要說也許您已經知道的很多事情,所有的 phpBB3 之 php 檔案需要儲存成 UTF-8 不含 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.
當檔案被以包含 BOM 儲存時,有一個萬國字元插入到檔案的起點,而大多數的文字編輯器將不會顯示,所以您看不見它。

為什麼這是一個問題?
當涉及處理 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)
這與 BOM 有何關係?簡單地說,php 不能解析檔案中的 BOM 字元,而把它看成是在標籤「<?php」之前的一般字元。
就好比是,如果您在標籤「<?php」之前鍵入一些文字、留一個空格、或者是空一行,那麼都將導致錯誤一樣。

這個問題似乎最常發生在編輯 phpBB3 語言檔案時,儲存它們為 UTF-8 包含 BOM 編碼。
這將導致頁面上頭出現類似的錯誤,或者是根據已編輯的檔案引起其他的問題,例如確認代碼無法正常運作。

如何正確地儲存檔案?
一般而言,您應該總是使用好的文字編輯器來編輯您的檔案。
這其中並不含 notepad 或 wordpad,由於某些原因,當檔案被儲存為 UTF-8 時,微軟設計它們會自動加入 BOM。
我將以紅色字再強調一次。不要用微軟的 notepad 或 wordpad 來編輯 phpBB3 檔案。

經常被推薦用來編輯 phpBB3 檔案的文字編輯器是 Notepad plus 或 Notepad++
這是一個以 GPL 授權之免費的文字編輯器。

使用 Notepad++ 要編輯以及正確地儲存檔案,您需要點選上頭選單「Format」『編碼』,如下圖。
Notepad++_01.jpg
Notepad++_02.jpg
這將給您一個下拉式編碼選單去選擇。
在選單中,您需要選擇「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/
施比受有福,歡迎來信賜教,謝謝 & 再見!
祝福您 好運 ^_^
歡迎加入★★心靈捕手★★ :: 討論區!!
http://wang5555.hopto.org/phpBB3/
p.s. 奉老婆之命:在晚上十一點前,得關機睡覺!!!

動機不明
喝咖啡的綠皮猴
喝咖啡的綠皮猴
文章: 1186
註冊時間: 2002-03-06 20:37
來自: GOP (重啟)

Re: phpBB3 以及 UTF-8 不含 BOM

文章 動機不明 » 2010-06-02 13:47

這篇寫得很好,有提到修改 PHP 檔案時的重點,非僅適用於 phpBB3 而已

我遇過很多人問,為什麼檔案明明就一模一樣,放上去(web)了以後就是失敗
答案就如同上篇老師講的,是編碼問題。

這邊幫忙補充一點:
檔案錯了不用重來,先 [全選] - [複製] 之後,轉換檔案編碼為 UTF-8(非BOM) ,再貼上,則仍然是原來的內容,此時編碼已經轉換過了,不會造成亂碼無法使用的情況喔! (我用 EmEditor,但應該適用全部的文字編輯器)

回覆文章

回到「3.0」