2012-08-28 63 views
5

我正在使用/存儲重音字符在數據庫中的網站上工作。我有網頁模板集,以便的config.php字符集變量的設置,如火柴:CodeIgniter配置字符集和UTF-8支持

<meta charset="<?php echo $this->config->item('charset');?>"> 

我遇到的問題是,當$config['charset']設置爲UTF-8,形式驗證失敗,如果包含重音字符,就好像沒有提交字符。因此,例如,如果字符串中包含任何字符,必需字段將反彈回來。字符串減去á工作正常。

我已經設法通過改變得到這個工作的$config['charset']ISO-8859-1和插入前將文本轉換爲UTF-8/PHP的utf8_encode()utf8_decode()從數據庫中檢索後。這是最好的方式還是我錯過了一些需要的東西,以獲得帶有重音字符的UTF-8,在CodeIgniter中工作?

任何意見讚賞。

+0

確保你設置的是UTF-8。很難說出什麼問題,但可能在某個時候你有不同的字符集。必須閱讀:http://www.joelonsoftware.com/articles/Unicode.html。 – Styxxy

回答

12

您必須確保您在任何地方都使用UTF-8,並且PHP和MySQL都配置爲處理UTF-8。

在HTML中,添加了元標記:

<meta charset="utf-8" /> 

並將其保存在UTF-8格式。這裏是how to do that in notepad++

定義MySQL表支持UTF-8,創建表:

DEFAULT CHARSET=utf8; 

並設置爲連接:在php.ini

mysql_set_charset('utf8', $con); 

Enable UTF-8

default_charset = "utf-8" 

全手動檢查Handling Unicode Front To Back In A Web App

+0

非常感謝答案和鏈接 - 我會檢查以確保UTF-8始終在使用中。表單驗證問題是由$ config ['charset']設置被設置爲'UTF-8'(全部爲大寫)而不是'utf-8'(全部爲小寫)引起的。出於某種原因,默認設置爲大寫'UTF-8'不起作用(至少不是我的設置)。 –

+0

很酷,很高興幫助:) +1 – Kuf

+0

在google上發現它的人的小意見 - 此問題的替代來源可能是表_or column_的編碼(是的,更改表的編碼不會更改單個列的編碼) - 在這種情況下,使用UTF-8字符串編輯列內的值會導致「錯誤的字符串值」警告,當您通過codeigniter運行查詢時,該警告不可見。您只會看到?而不是UTF-8 char 。 – MarcinWolny