2011-02-09 85 views
3

「對不起,我希望這不是奇怪或什麼,」有沒有PHP函數來解決這個問題?

我該如何解決這個問題的編碼?

+2

這取決於它來自哪裏以及它是什麼。一般來說,一旦你有真正的[mojibake](http://en.wikipedia.org/wiki/Mojibake),你不能神奇地修復它。如果你只是沒有正確地處理編碼,你可以在適當的位置修正它,以防止它首先成爲mojibake。 – deceze

+2

你能更詳細地描述這個問題嗎? – yuxhuang

回答

4

什麼你正在運行到的結果是數據以一種編碼寫入,並被解釋爲另一種編碼。您需要確保您要求輸入的格式與您所期望的相同。我建議您只需堅持使用UTF-8,除非您需要避免多字節字符,在這種情況下你可能想看看強制ASCII。

確保你告訴PHP使用UTF-8內部:

ini_set('default_charset', 'UTF-8'); 

,並確保你告訴瀏覽器期望UTF-8編碼的文本,無論是在頭...

header("Content-Type:text/html; charset=UTF-8"); 

...在你的meta標籤(HTML5以下)...

<meta charset="utf-8"> 

設置,這將告訴瀏覽器發送UTF-8編碼的內容在提交表單時會提供給您,並且它會將您發回的結果解釋爲UTF-8。

您還應該確保數據庫存儲和連接編碼都是UTF-8格式。通常只要它只是一個非常愚蠢的數據存儲(即它不會以任何方式操縱或解釋數據),這並不重要,但最好是稍後再遇到問題。

+0

+1用於檢查您的數據庫是否也是UTF-8 – Summer

1

什麼是你的PHP設置?

您可以配置PHP來編碼出來的字符串,在大多數情況下UTF8它的建議,你也必須在你的HTML頁面中的內容類型標籤

3

iconv函數通常能夠處理這類編碼問題。

+1

'iconv'可以提供幫助,但前提是您知道需要將編碼轉換爲另一種編碼。 Webnet似乎並不熟悉這個問題,不知道他想要的是從哪個轉換來的編碼。 – coreyward

0

另外,如果我可以添加上述的那些要點,如果要將數據保存到數據庫表中,表和列(也可能是數據庫本身)應該有utf8_general_ci,以便它可以處理多字節字符。

在運行任何查詢之前,我還發出此查詢集名稱'utf8'

+0

排序規則(比如utf8_general_ci或utf8_unicode_ci)對於除排序之外的任何內容均無關緊要。你可能是指「CHARACTER SET」,因爲MySQL指的是它應該被設置爲「utf8」。 – coreyward

+0

不錯..感謝澄清它 – r2b2

+0

偶然發現了這個答案和評論....你應該實際上使用'utf8mb4_unicode_ci'! mysql的utf8只支持最多3個字節... utf8mb4支持完整的4個字節。統一整理也有所破壞unicode整理遵循規範。 –

0

看起來合適的解決方案是mb_convert_encoding()

mb_convert_encoding(字符串$ STR,字符串$ to_encoding [,混合$ from_encoding])

字符串str的字符編碼轉換選自任選from_encoding到to_encoding 。

相關問題