使用PHP和MySQL显示日文字符的问题

时间:2011-01-19 22:21:12

标签: php mysql xml utf-8

我正在使用PHP连接到MySQL数据库来创建XML文件。除了字符编码外,一切正常。我需要日文和英文字符,所以显然我选择使用UTF-8。唯一的问题是数据库中的日文字符无法正确显示。

数据库和表的排序规则设置为UTF8_general_ci,MySQL连接排序规则也是如此。

我的php文件定义为在两个不同的地方使用UTF-8(并且在没有BOM的情况下以UTF-8保存),一次在带有以下行的标题中: header(“Content-type:text / xml; charset = utf-8”); 它定义的另一个地方是XML输出文件。

作为一个测试我已经让php文件在代码中写了一些日文字符,所以不是来自数据库。这显示正确(在这里可以看到http://jlearn.0sites.net/Flash/xml/xml.php ...最后5个条目有一些日语,后面跟着问号,因为日语应该来自数据库)。

所以问题很可能是数据库,但一切看起来都对我不错。

有什么想法吗?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

如果您使用对象进行数据库访问,那么这是适用于我的解决方案

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');
    }
}