Проблемы с отображением японских символов с использованием PHP и MySQL - PullRequest
7 голосов
/ 20 января 2011

Я использую PHP для подключения к базе данных MySQL для создания файла XML. Все работает, кроме кодировки символов. Мне нужны и японские, и английские символы, так что, очевидно, я решил использовать UTF-8. Единственная проблема заключается в том, что японские символы из базы данных отображаются некорректно.

Параметры сортировки для базы данных и таблиц установлены на UTF8_general_ci, как и параметры сортировки соединения MySQL.

Мой php-файл определяет использование UTF-8 (и сохраняется в UTF-8 без спецификации) в 2 разных местах, один раз в заголовке со следующей строкой: заголовок («Content-type: text / xml; charset = utf-8»); Другое место, которое он определяет, находится в выходном файле XML.

В качестве теста у меня был php-файл, который записывал некоторые японские символы только из кода, поэтому он не пришел из базы данных. Это отображается правильно (можно увидеть здесь http://jlearn.0sites.net/Flash/xml/xml.php ... последние 5 записей имеют японский язык, за которым следуют вопросительные знаки из-за японского языка, который должен быть взят из базы данных).

Таким образом, проблема, скорее всего, связана с базой данных, но для меня все выглядит правильно.

Есть идеи?

Ответы [ 2 ]

12 голосов
/ 20 января 2011

На самом деле только что опубликовал это - php mysql проблема кодирования запроса


То, что я склонен находить, многое решает:

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);
}
0 голосов
/ 04 августа 2015

Если вы используете объекты для доступа к БД, то вот решение, которое работает для меня

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');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...