2011-01-19 77 views
7

我正在使用PHP連接到MySQL數據庫來創建XML文件。除了字符編碼以外,所有的工作都正常。我需要日文和英文字符,所以顯然我選擇使用UTF-8。唯一的問題是數據庫中的日文字符無法正確顯示。使用PHP和MySQL顯示日語字符的問題

數據庫和表的排序規則設置爲UTF8_general_ci,就像MySQL連接排序規則一樣。

我的php文件定義爲在2個不同的位置使用UTF-8(並保存在UTF-8中,不包含BOM),一次在標題中使用以下行: header(「Content-type:text/xml;字符集= UTF-8" ); 它定義它的另一個地方是在XML輸出文件中。

作爲一個測試,我有php文件只是從代碼內寫入一些日文字符,所以不是來自數據庫。這顯示正確(在這裏可以看到http://jlearn.0sites.net/Flash/xml/xml.php ...最後5個條目有一些日語,後面跟着問號,因爲日語是來自數據庫)。

所以問題很可能是數據庫,但一切看起來都是正確的。

任何想法?

回答

12

實際上只是張貼了這個 - php mysql query encoding problem


我傾向於找解決了了很多東西是什麼;

mysql_query("SET NAMES 'utf8'"); 

在執行任何查詢之前。

該文檔建議您使用mysql_set_charset,但我經常會看到該功能缺失。

if(function_exists('mysql_set_charset')){ 
    mysql_set_charset('utf8', $db_con); 
}else{ 
    mysql_query("SET NAMES 'utf8'", $db_con); 
} 
+0

謝謝,工作出色的解決方案。我一直在爲此工作了大約3個小時,並沒有得到任何地方。 – Musera 2011-01-19 22:29:15

0

如果您正在使用DB訪問對象,那麼這裏是爲我工作

class DB 
{ 
    public $Link; 
    private static $_instance; 

    public static function instance() 
    { 
     if (NULL === self::$_instance) { 
      self::$_instance = new DB; 
     } 
     return self::$_instance; 
    } 

    private function __construct() 
    { 
     $host = 'localhost'; 
     $user = 'your_user_name'; 
     $pass = 'your_password; 
     $db = 'db_name'; 
     $this->Link = new mysqli($host, $user, $pass, $db); 
     $this->Link->set_charset('utf8'); 
    } 
}