我正在使用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个条目有一些日语,后面跟着问号,因为日语应该来自数据库)。
所以问题很可能是数据库,但一切看起来都对我不错。
有什么想法吗?
答案 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');
}
}