PHP - Анализ файла UFT-8 и вставка его в базу данных портит специальные символы, такие как é - PullRequest
2 голосов
/ 17 июля 2010

На веб-сервере у меня есть php-скрипт, который анализирует файл .sql (который хранится непосредственно на сервере) и выполняет запросы к базе данных mysql. У меня много французских персонажей, которые плохо вставляются: é становится Ã ©.

Когда я открываю файл sql с помощью notepad ++, я вижу, что кодировка «uft-8 без BOM».

Мой скрипт выглядит так:

$handle = fopen("test.sql", "r") or die("couldn't get handle");
if ($handle) 
{
    while (!feof($handle)) 
    {
        $buffer = fgets($handle, 4096);
        if (strlen ( $buffer ) < 3 ) // if we have a blank line
        {       
            mysql_query($query);
            $query = $buffer;
            sleep(0.5);
        } 
        else 
        {
            $query .= $buffer;
        }
    }
    mysql_query($query); // last insert
    fclose($handle);
}

Когда я открываю базу данных через phpmyadmin, я вижу, что специальные символы уже сломаны сразу после выполнения скрипта.

Ответы [ 2 ]

3 голосов
/ 17 июля 2010

Вам может потребоваться запустить 'SET NAMES UTF8' перед вставкой, потому что mysql очень смешно относится к кодированию символов. Да, даже если вся ваша база данных уже настроена на использование кодировки символов UTF-8 и параметров сортировки general-utf8-ci.

http://forums.mysql.com/read.php?103,46870,46870#msg-46870

1 голос
/ 18 июля 2010

Вместо этого следует использовать функцию mysql_set_charset, а не запрос SET NAMES, как описано в http://www.php.net/manual/en/function.mysql-set-charset.php

Несмотря на то, что ваша база данных находится в UTF-8, а PHP работает в UTF-8, соединение, установленное по умолчанию, вероятно, является соединением Latin-1, поэтому MySQL попытается преобразовать данные, даже если это не

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...