我做了如下的事情時:PHP的htmlspecialchars()函數的錯誤嘗試使用UTF-8字符串
- 我有一個數據的電子表格。其中一行有一個ü字符。
- 我將此文件另存爲OpenOffice.org中的CSV文件。當它要求我輸入字符編碼時,我選擇UTF-8。
- 我用的Navicat創建一個MySQL數據庫表,InnoDB的使用UTF-8編碼utf8_general並導入CSV。
- 我嘗試使用PHP函數
htmlspecialchars($string, ENT_COMPAT, 'UTF-8')
其中$string
是包含特殊字符ü字符串。
它給我一個錯誤:參數中的多字節序列無效。當我將'UTF-8'
更改爲'ISO8859-1'
時,不會引發錯誤,但會顯示不正確的字符。 ('未知字符'字符,看起來像<?>
)
如果我使用HTML表單更新數據庫中的字符串,錯誤消失並且字符顯示正確,但是,當我查看記錄時Navicat的,它看起來兩個角色:
[1/4][A with some thing on top of it]
沒有被看作是一個character.`
這是怎麼回事,這裏的事情出錯了,我能做些什麼什麼有些多字節?
根據MySQL的一般查詢日誌,'utf8'實際發送到MySQL服務器組名稱。儘管在這個過程中沒有任何形式(當我更新記錄時有一種形式),但它使用HTML元標記設置爲UTF-8。 (但同樣,在使用表單之前,該錯誤已經彈出。) – 2010-11-21 13:33:11
@Pelle你能否確認它實際上是發送到服務器*的連接*?並且確認,你引用的錯誤實際上是由'htmlspecialchars()'引發的? – 2010-11-21 13:33:52
想通了。所有的東西都是UTF-8,除了用於選擇數據時的連接。在選擇語句修復之前放置SET NAMES UTF8。 – 2010-11-21 14:05:26