2013-03-11 155 views
0

如果語言是英語,我有一個註冊表格,它正確對應於db表格。 IF語言是希​​臘語或其他用戶名出現在表中作爲加密(損壞??)。在數據庫表中選擇utf8_general_ci。我應該在代碼中添加什麼內容才能在所有語言中獲得相同的結果。 (結果=在db表中可以看到用戶的用戶名正確)。不同語言的用戶

+1

http://kunststube.net/encoding/和http://kunststube.net/frontback/ – 2013-03-11 10:01:08

+0

感謝。你是個好人! – 2013-03-11 10:03:44

回答

1

確保提供結果的頁面與數據庫的編碼具有相同的編碼。如果表中有UTF-8數據,但顯示這些數據的頁面是例如ISO-8859-1,則ISO-8859-1字符集範圍之外的字符會顯示爲奇怪。

在PHP中一個可以修改標題爲這樣:

header('Content-type: text/html; charset=utf-8'); 
+0

謝謝,我會試試看。 – 2013-03-11 10:20:07

0

第一個查詢之前添加

mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); 
+1

更好地使用mysql_set_charset()而不是mysql_query()。 http://www.php.net/manual/en/mysqlinfo.concepts.charset.php。或者甚至更好,使用PDO:http://stackoverflow.com/questions/584676/how-to-make-pdo-run-set-names-utf8-each-time-i-connect-in-zendframework – 2013-03-12 03:16:14

0

UTF8是在PHP非常棘手。一些更多的問題(除了UTF8頭和UTF8 DB連接其他2個回答)我知道的:

  1. 您將需要使用mbstring functions。例如,substr()可能需要由mb_substr()函數替換。有關字符串函數的完整列表。見here。爲了讓php知道您期望的內部編碼,請在腳本開頭調用此函數:

    mb_internal_encoding(「UTF-8」);

  2. 根據你的php版本,你可能需要不同地處理htmlspecialchars(),htmlentities()。

    與htmlspecialchars()一樣,htmlentities()採用可選的第三個參數編碼,它定義了轉換中使用的編碼。如果省略,則此參數的缺省值是5.4.0之前的PHP版本中的ISO-8859-1,而PHP 5.4.0及之後的版本是UTF-8。

  3. 使用mysql LENGTH()函數的舊查詢可能不是我們想要的,因爲length()返回字節長度,而不是字符長度。我們可能需要更新它們以使用CHAR_LENGTH()。但是,這一切都取決於上下文!在以下示例中,中文列有3個字符,但每個字符佔3個字節。

mysql> select *, length(d), char_length(d) from t where id=3; 
+----+-----------+-----------+----------------+ 
| id | d   | length(d) | char_length(d) | 
+----+-----------+-----------+----------------+ 
| 3 | 被凍死 |   9 |    3 | 
+----+-----------+-----------+----------------+