【问题标题】:Problems displaying Japanese characters using PHP and MySQL使用 PHP 和 MySQL 显示日文字符的问题
【发布时间】:2011-06-12 02:32:31
【问题描述】:

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

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

我的 php 文件定义为在 2 个不同的地方使用 UTF-8(并保存在没有 BOM 的 UTF-8 中),一次在带有以下行的标题中: header("内容类型: text/xml;charset=utf-8"); 它定义它的另一个地方是在 XML 输出文件中。

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

所以问题很可能出在数据库上,但在我看来一切都是正确的。

有什么想法吗?

【问题讨论】:

    标签: php mysql xml utf-8


    【解决方案1】:

    实际上刚刚发布了这个 - 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);
    }
    

    【讨论】:

    • 谢谢,工作出色。我已经为此工作了大约 3 个小时,但没有取得任何进展。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多