使用 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 显示日文字符的问题的主要内容,如果未能解决你的问题,请参考以下文章