2013-08-28 55 views
2

我有一個非常奇怪的行爲,我正在經歷。當我用UTF8字符(特別是'ő'或'ű'匈牙利字符)運行插入時,它會插入一個?而不是角色。但是,如果在傳遞查詢之前將它回顯出來,它會顯示正確的字符。PHP UTF-8編碼MYSQL插入?

我做了什麼:

  • 我已經設置每一個可能的整理,字符集的MySQL表和 數據庫UTF8。
  • 我呼籲mysql_query("SET NAMES 'UTF8'");
  • 我呼籲mysql_query("SET CHARACTER SET UTF8");
  • 我已經設置網頁編碼與:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

什麼按預期工作:

  • 的phpMyAdmin
  • 相呼應,從特殊字符表

它正在使用本地主機服務器。 非本地服務器的默認編碼是ISO-8859-1,我無法更改。

+0

檢查您的HTTP標頭。即使您設置了元標記,大多數瀏覽器也會默認使用HTTP標頭。 – Mike

+2

[UTF-8直通]可能的重複(http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) – 2013-08-28 22:21:23

+0

似乎像用utf-8頭文件和iso-奇怪的是8859-1 metatag。 –

回答

1

如果你

1 - 設定你的HTML頁面的郎編碼utf-8其中包括您的形式
2 - 只用你的表單中輸入輸入你的相關的MySQL數據庫表
3 - 設置所有歸類到utf8_unicode_ci在你的MySQL(表和行排序)
4 - 如果你有premission你也可以setyour MySQL數據庫的排序規則utf8_unicode_ci

,那麼你將不會看到實體在你的MySQL記錄也

這是我使用的解決方案,並且對我的母語沒有任何問題,它也有很多unicode字符。

下面我給你介紹我的數據庫連接的PHP代碼&建議(通過使用準備好的語句;請http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

//mysql bağlantısı 
global $db_baglanti; 
$db_baglanti = new mysqli(vt_host, vt_user, vt_password, vt_name); 
if ($db_baglanti->connect_errno) 
{ 
    echo "MySQL bağlantısı kurulamadı: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

if (!$db_baglanti->set_charset("utf8")) 
{ 
    printf("utf8 karakter setinin yüklenmesinde problem oluştu: %s\n", $db_baglanti->error); 
} 
else 
{ 
    $db_baglanti->set_charset("utf8"); 
} 

我認爲主要的一點對你來說是2號在列表上方。

另外如果你已經有了一些文檔,編輯你的文檔的元字符標記用於字符集聲明並使用記事本++ encoding>convert to UTF-8 without BOM,保存你的文檔,從現在開始安全地繼續使用你的UTF-8字符。 (這是針對與BOM相關的可能的HTML端問題的解決方案)