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

Posted

技术标签:

【中文标题】使用 PHP 和 MySQL 显示日文字符的问题【英文标题】:Problems displaying Japanese characters using PHP and 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 个条目有一些日语,后跟问号,因为日语应该来自数据库)。

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

有什么想法吗?

【问题讨论】:

【参考方案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');
    

【讨论】:

以上是关于使用 PHP 和 MySQL 显示日文字符的问题的主要内容,如果未能解决你的问题,请参考以下文章

让日文字符在 R Shiny 中显示

如何在 phpMyAdmin 中显示 UTF-8 字符?

linux导入日文文件显示乱码

编程题字符集合

我应该放啥东西让日文字符可见吗?

将日文字符从 TextBox 存储到 SQL 表