2011-01-19 31 views
7

Tôi đang sử dụng PHP kết nối với cơ sở dữ liệu MySQL để tạo tệp XML. Mọi thứ đều hoạt động ngoại trừ mã hóa ký tự. Tôi cần cả hai ký tự tiếng Nhật và tiếng Anh nên rõ ràng là tôi đã chọn sử dụng UTF-8. Chỉ có vấn đề là các ký tự tiếng Nhật từ cơ sở dữ liệu không hiển thị chính xác.Sự cố khi hiển thị các ký tự tiếng Nhật bằng PHP và MySQL

Việc đối chiếu trên cơ sở dữ liệu và bảng được đặt thành UTF8_general_ci, cũng như collation kết nối MySQL.

Tệp php của tôi xác định sử dụng UTF-8 (và được lưu trong UTF-8 không có BOM) ở 2 vị trí khác nhau, một lần trong tiêu đề với dòng sau: tiêu đề ("Content-type: text/xml; charset = utf-8 "); Địa điểm khác mà nó định nghĩa nó nằm trong tệp đầu ra XML.

Khi thử nghiệm, tôi đã có tệp php viết một số ký tự tiếng Nhật ngay từ bên trong mã, do đó không đến từ cơ sở dữ liệu. Điều này hiển thị chính xác (có thể thấy ở đây http://jlearn.0sites.net/Flash/xml/xml.php ... 5 mục cuối cùng có một số tiếng Nhật theo sau là dấu chấm hỏi do tiếng Nhật có nghĩa là đến từ cơ sở dữ liệu).

Vì vậy, vấn đề rất có thể là cơ sở dữ liệu nhưng mọi thứ đều đúng với tôi.

Bất kỳ ý tưởng nào?

Trả lời

12

Trên thực tế vừa mới công bố này - php mysql query encoding problem


Những gì tôi có xu hướng để tìm phá được rất nhiều điều là;

mysql_query("SET NAMES 'utf8'"); 

Trước khi thực hiện bất kỳ truy vấn nào.

Tài liệu khuyên bạn nên sử dụng mysql_set_charset nhưng tôi thường thấy chức năng đó bị thiếu.

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

Cảm ơn, làm việc rực rỡ. Tôi đã làm việc trên đó trong khoảng 3 giờ và không nhận được ở đâu. – Musera

+0

Hãy giúp nó! –

0

Nếu bạn đang sử dụng đối tượng để truy cập db thì đây là giải pháp mà làm việc cho tôi

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'); 
    } 
} 
Các vấn đề liên quan