2011-09-03 70 views
3

我從來沒有遇到過這個問題,通常是我的數據庫或html頁面。但現在我認爲它是我的PHP。我從csv或從文本區域導入文本,並且兩種方式都出錯。PHP中的字符編碼

例如é更改爲Ã。我用htmlentities來解決這個問題,但沒有奏效。 htmlentities函數在html中沒有返回é,而在html實體中沒有返回é,所以它在htmlentities進入之前已經失去了真正的字符...所以這是否意味着我的php文件有錯誤的編碼或者什麼?

我希望有人能幫助我..

謝謝! Chris

回答

2

文件通常是ISO-8859-1(拉丁文)或UTF-8 ... ISO-8859-1是每個字符1個字節,UTF-8每個字符1-4個字節。所以,如果你期望得到2個字符,那麼你正在閱讀UTF-8並將其顯示爲ISO-8859-1 ......如果你得到奇怪的字符,那麼你正在閱讀ISO-8859-1並將其顯示爲UTF -8。

如果您提供更多詳細信息,將更容易查明,但總之,您有不一致的字符集,需要轉換一個或另一個,因此它們都是相同的。但是從目前看來,您在項目中使用ISO-8859-1,但是您正在從某處讀取某些UTF-8 ...如果該數據確實應存儲爲UTF-8,請使用utf8_decode($ text) ,或找到數據並手動轉換。

編輯:如果您在某處使用AJAX,那麼您將始終從中獲取UTF-8,如果您想繼續使用ISO-8859-1,則必須使用utf8_decode()自己解碼。

+0

非常感謝您的解釋,utf8_decode完全做到了! – Chris

1

嘗試打開你的PHP文件並更改編碼設置爲UTF-8

,如果沒有幫助,將它添加到你的PHP:

header('Content-Type: text/html; charset=utf-8'); 

或者給你的HTML:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />