ФорумПрограммированиеPHP для идиотов → База в разных кодировках

База в разных кодировках

  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 30 марта 2010 г. 14:14

    Суть такая. Есть база. Половина в UTF-8, половина в CP1251. Нужно все превести в ютф. База относительно большая. Вручную - пизданешься. Весит несколько мегов. Так что пхп скорее всего обработает нормально.
    Снял бекап. Распаковал. Попытался сделть примерно так (от безысходности пробовал всякую хуйню, поэтму в коде могут быть дикие косяки, но смысл я думаю понятен):
    <?php
    set_time_limit (0);
    $file_name = &#39;pd&#39;;
    $fp = fopen($file_name . &#39;.sql&#39;, &#39;r&#39;);
    if (!$fp)
    {
       echo &#39;Ошибка при открытии файла&#39;;
    }
    while (!feof($fp))
    {
       $buffer = fgetc($fp);
    $char = mb_detect_encoding($buffer, &quot;auto&quot;);
    //echo $char;exit();
    if ($char != &#39;UTF-8&#39; AND $char != &#39;ASCII&#39;)
    {
     $buffer = iconv(&#39;cp1251&#39;, &quot;UTF-8&quot;, $buffer);
     //echo $char . &#39;1&#39;;
    }
    $base .= $buffer;
    }
    fclose($fp);

    echo $base;
    exit();
    /******************************************************
    *******************************************************
    *Дальше идет хуйня не имеющая отношения к делу.
    *******************************************************
    *******************************************************/
    $fp = fopen($file_name . &#39;_utf8.sql&#39;, &#39;w&#39;);

    if (!$fp)
    {
       echo &#39;Ошибка при открытии файла&#39;;
    }

    fwrite ($fp, $base);
    echo &quot;Ok&quot;;

    fclose($fp);

    Есть какие мысли, опыт? {+++83+++} Забыл сказать. Неправильно конвертится.
  • Givi

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 30 марта 2010 г. 23:44, спустя 9 часов 30 минут 8 секунд

    SpartakuS, открой её в Нотепад++ и сделай замену по всему тексту одной кодировки (строки с кодировкой) на другую, сохрани файл в нужной тебе кодировке, залей на сервер. Вот и всего делов-то :)
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 1:28, спустя 1 час 44 минуты 15 секунд

    Givi, не понял.
    Там достаточно много в альтернативной кодировке. По строке все не скопируешь.
    Или ты имеешь символ а в одной кодировки заменить на сомвол а в другой и так до я?
  • Givi

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 2:16, спустя 47 минут 30 секунд

    SpartakuS, то есть, если редактором (Нотепад++ или подобное, поддерживающее юникод) дамп открыть, то половина кириллицы читается нормально, а половина иероглифами?
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 2:46, спустя 29 минут 48 секунд

    Givi, именно
  • Givi

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 3:14, спустя 28 минут

    Сделай дамп &quot;дампером&quot;. Мне как-то в подобной ситуации помог.
    Да и вообще штука очень удобная для больших баз. {+++49+++} Он, по идее, закинет весь файл в одну кодировку, тогда уже и править (автозамены делать) можно будет его.
  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 31 марта 2010 г. 3:21, спустя 7 минут 27 секунд

    Givi, кстати хорошая идея. Я про первый твой пост.

    SpartakuS, сделай дамп таблиц которые только в кодировке СP1251 и через Нотепад++ переведи ее в UTF.
    Из базы удали таблицы и залей получившиеся.
  • Barbos

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 11:41, спустя 871 день 8 часов 20 минут

    Думаю, мы доставим друг другу удовольствие.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!