1 (изменено: Soft Alex, 2009-07-17 16:08:53)

Тема: Глобальная проблема с кодировкой!

Захотели как-то перевести сайт с кодировки cp1251 в кодировку utf-8. Это давно было... В итоге мы это сделали каким-то образом.. Вроде взяли дамп  и конвертнули файл дампа в кодировку utf-8 и вернули это дело в базу. Вроде это было проблемно. Потом начались проблемы сразу с сайтом (появились вопросики), но путем перекодировки (вроде и только) пхп файлов сайта в кодировку utf-8 всё заработало хорошо. Я вообще являюсь вторым админом на сайте, но доступ у меня есть к большей части сайта.

Вдруг на сайте вижу где-то глюки... нету буквы "ш" и "и".. крокозябры вместо них короче. Решил разобраться в чём проблемы. Поставил короче phpMyAdmin и там вижу вместо русского вот такие КонцерС. Многочисленные манипуляции с кодировкой никакого результата не дают. Я уже отчаялся. Обратился к хостеру. Хостер мне ничем не помог...

Переписка по мейлу и асе:
----------------------------------------------------
08.04.2009 19:05:31, Yutex
просто кодировка БД utf8
08.04.2009 19:05:40, Yutex
пхпмайдамин отображает только cp1251
09.04.2009 01:00:23, Yutex
потмоу что умолчанию стоит cp1251 на всём сервере
-----------------------
Здравствуйте.
К сожалению, но для её решения нужно перевести весь сервер в другую
кодировку, что неприемлемо.
--------
Здравствуйте.
К сожалению, но первести весь сервер в кодировку utf8  мы не будем иначе все
остальные сайты перстанут работать.

Сайт в принципе у меня отображается корректно (в результате каких то манипуляций в пхпмайадмин с кодировкой данные сайт стал принимать правильно т.е. без появления новых "ш" и "и"), но видно что перекодировка сайта была сделана неудачно. База большая довольно. Я не знаю что делать дальше. Мне нужен сайт в кодировке utf8 и пхпмайадмин в кодировке utf8, чтобы русский текст отображался и корректно обробатывал данные. Но у меня большой клубок проблем с кодировкой. В принципе я понимаю, что хостер не поддерживает utf, но ведь сайт сейчас работает в кодировке utf8.

Вот привожу вам данные:

phpMyAdmin - 2.11.9.5 - свой установлен в одну из папок сайта
в корне сайта есть .htaccess с настройкой AddDefaultCharset UTF-8
движок сайта spaizNuke (cтарый).

Функция подключения к базе через spaizNuke :
[mono]function sql_connect($host, $user, $password, $db)
{
    $dbi=@mysql_connect($host, $user, $password) or die("Невозможно создать соеденение с базой ! Проверьте данные необходимые для соеденения с базой MySQL ! Данные находятся в файле config.php");
    @mysql_select_db($db) or die("Найти базу с таким именем не удалось!");
    return $dbi;
    break;;
}
[/mono]

Язык при входе в phpMyAdmin  выбирал во всех кодировках

Главная страница phpMyAdmin - 2.11.9.5:
[mono]MySQL-кодировка:  UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: cp1251_general_ci
[/mono]

Серверные переменные и настройки:
[mono]character set client      utf8
(Глобальное значение)     cp1251
character set connection     cp1251
character set database     cp1251
character set results     utf8
(Глобальное значение)     cp1251
character set server     cp1251
character set system     utf8
character sets dir     /usr/share/mysql/charsets/
collation connection     cp1251_general_ci
collation database     cp1251_general_ci
collation server     cp1251_general_ci [/mono]

Запрос SHOW GLOBAL VARIABLES LIKE 'char%';
character_set_client      cp1251
character_set_connection     cp1251
character_set_database     cp1251
character_set_results     cp1251
character_set_server     cp1251
character_set_system     utf8
character_sets_dir     /usr/share/mysql/charsets/

В базе, таблице сравнение везде и ко всему стоит cp1251_general_ci

Помогите пожалуйста! Заранее всем спасибо!

2

Re: Глобальная проблема с кодировкой!

Soft Alex
1) Создайте дамп текущей БД и покажите структуру любой таблицы имеющей строки с кириллицей.
2) Покажите как в дампе отображается кириллица, если она видна в виде крякозябов.

Добавьте в функцию подключения следующую строку (пока ее закомментируйте, она понадобится после):

function sql_connect($host, $user, $password, $db)
{
    $dbi=@mysql_connect($host, $user, $password) or die("Невозможно создать соеденение с базой ! Проверьте данные необходимые для соеденения с базой MySQL ! Данные находятся в файле config.php");
    mysql_query('SET NAMES utf8');
    @mysql_select_db($db) or die("Найти базу с таким именем не удалось!");
    return $dbi;
    break;;
}

Поищите внимательно, возможно mysql_connect еще где-то будет отдельно прописано, в админке, например, тогда там так же надо будет добавить эту строку.

Soft Alex сказал:

phpMyAdmin - 2.11.9.5 - свой установлен в одну из папок сайта

Очень правильное решение.

Soft Alex сказал:

в корне сайта есть .htaccess с настройкой AddDefaultCharset UTF-8

Можете еще туда же добавить:

PHP_VALUE default_charset utf-8

3 (изменено: Soft Alex, 2009-07-18 18:55:37)

Re: Глобальная проблема с кодировкой!

Hanut сказал:

1) Создайте дамп текущей БД и покажите структуру любой таблицы имеющей строки с кириллицей.
2) Покажите как в дампе отображается кириллица, если она видна в виде крякозябов.

Вот как это выглядит в PHP Expert Editor при открытия дампа формата sql:

--
-- Структура таблицы `spnuke_news_topics`
--

CREATE TABLE IF NOT EXISTS `spnuke_news_topics` (
  `news_topics_id` int(11) unsigned NOT NULL auto_increment,
  `news_topics_title` varchar(255) NOT NULL default '',
  `news_topics_image` varchar(255) default NULL,
  `news_topics_description` varchar(255) default NULL,
  PRIMARY KEY  (`news_topics_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `spnuke_news_topics`
--

INSERT INTO `spnuke_news_topics` (`news_topics_id`, `news_topics_title`, `news_topics_image`, `news_topics_description`) VALUES
(1, 'Новости Alizee', 'alizeenews.gif', 'Новости, касающиеся Alizee'),
(2, 'Новости сайта', 'site.gif', 'Новости, касающиеся сайта'),
(3, 'Архив', 'archive.gif', 'Здесь хранятся старые темы');

-- --------------------------------------------------------

--
Hanut сказал:

Добавьте в функцию подключения следующую строку (пока ее закомментируйте, она понадобится после):

Хорошо. Буду иметь ввиду...  Я кстати уже это так делал и тогда результат был похож на дамповый... типа "Здесь".

Hanut сказал:

Можете еще туда же добавить:

Ок.

Еще вот такие симптомы болезни:
При редактировании какой нибудь таблицы в phpMyAdmin введенные русские буквы вводятся и нормально отображаются в phpMyAdmin, но на сайте в браузере Firefox это надпись выглядит например квадратами с написанным внутри символом "FFFD". А вот если ввести символы типа "?" то они будут отображаться как вопросики и на сайте и в phpMyAdmin. С английскими буквами всё норм. При вводе информации с сайта любая инфа нормально отображаеться на том же сайте, но не в базе

4

Re: Глобальная проблема с кодировкой!

У вас таблицы в cp1251, а не в utf8, поэтому символы отсутствующие в таблице данной кодировки замещаются на знаки вопроса.

Скрипт перекодировки с инструкциями его использования отправил на вашу почту.

5 (изменено: Soft Alex, 2009-07-21 18:56:00)

Re: Глобальная проблема с кодировкой!

Вроде получилось, но не без проблем. Еще проблемы с буквами "ш" и "и"... Нашел только это решение, но не знаю как этим пользоваться(((((( :
http://hostinghelp.biz/content/%D1%80%D … D0%B8-mysq

Может знаете как это в винде сделать или на пхп...? Я не понимаю как написать это пёрле

6

Re: Глобальная проблема с кодировкой!

Ага... вот кое чё сделал в скрипте:

$news_title=strtr($news_title,array("\xD1\x3F"=>"ш", "\xD0\x3F"=>"И"));

Но мне хотелось бы исправить ошибку на корню... например в файле SQL ..

как заменить:
ш - 0xD13F
И - 0xD03F

В то время как верные коды для этих букв:
ш - 0xD188
И - 0xD098

или проще говоря:
xD1\x3F на \xD1\x88
и \xD0\x3F на \xD0\x98

7

Re: Глобальная проблема с кодировкой!

Soft Alex
Тот кусок дампа, что вы выложили получилось перекодировать нормально, без проблем с символами.

В SQL файле вы можете также и заменить символы, наверное: записать дамп в строку и произвести замену.

8 (изменено: Soft Alex, 2009-07-21 22:03:50)

Re: Глобальная проблема с кодировкой!

Hanut сказал:

В SQL файле вы можете также и заменить символы, наверное: записать дамп в строку и произвести замену.

А нельзя это в Notepad++ сделать как-нибудь? Или как мне легче сделать...

9

Re: Глобальная проблема с кодировкой!

Soft Alex сказал:

А нельзя это в Notepad++ сделать как-нибудь? Или как мне легче сделать...

К сожалению не могу подсказать можно ли это сделать с помощью Notepad++.

10 (изменено: Soft Alex, 2009-07-22 17:43:50)

Re: Глобальная проблема с кодировкой!

Что-то с файлом такая строчка, которую я приводил выше, не работает sad

11

Re: Глобальная проблема с кодировкой!

Soft Alex
Если можете, вышлите дамп на hanut@php-myadmin.ru попробую его перекодировать.

12 (изменено: Soft Alex, 2009-07-22 20:34:05)

Re: Глобальная проблема с кодировкой!

Да не нормально же отображается... но буквы "ш" и "И" остаются вопросами) Выше я приводил решение с заменой... но написав отдельный собственный скрипт такая замена не происходит в файле дампа.

У меня вариант решения этого вопроса... есть программа Sypex Dumper Lite 1.0.7... куда там можно/нужно: всунуть строчку??

типа такой:
$news_title=strtr($news_title,array("\xD1\x3F"=>"ш", "\xD0\x3F"=>"И"));

т.е при восстановлении дампа как бы и заменить ошибки... Может получится что-то... sad

13

Re: Глобальная проблема с кодировкой!

К сожалению, с Sypex Dumper помочь не смогу.

Вы делаете замену собственным скриптом, когда дамп находится в каком виде? Какая кодировка файла? Как выглядит кириллица?

14

Re: Глобальная проблема с кодировкой!

Hanut сказал:

когда дамп находится в каком виде? Какая кодировка файла? Как выглядит кириллица?

Дамп у меня находился в 3 положениях... до нотепада, после нотепада, после iconv
Кодировка в дампах соответственно: Кракозябры (ANSI UTF8), Кириллица (ANSI), Кириллица.(ANSI)

Строчка работает при сайте в состоянии до корректирования проблем дампа в целом:

$news_title=strtr($news_title,array("\xD1\x3F"=>"ш", "\xD0\x3F"=>"И"));

Т.е. я еще не установил нормальный дамп на сайт так как хочу на корню убить проблемы с буквами, но я поставил базу на сервер. в пхпМай админ всё хорошо, кроме тех-же букв "ш" и "И".

Вот мой самовольный скрипт для перекодировки файла sql:

<?php
$filename = '5656.sql';
$content = file_get_contents($filename);
    if (!$handle = fopen($filename, 'w+')) {
         echo "Не могу открыть файл '$filename'";
         exit;
    }else {
        echo "Открыл...";
    }
    $content = strtr($content, array("\xD1\x3F"=>"ш", "\xD0\x3F"=>"И"));
    if (fwrite($handle, $content) === FALSE) {
        echo "Не могу сохранить в файл '$filename'";
        exit;
    } else {
        echo "Исправлено...";
    }
    fclose($handle);
?>

Вот я вам залил по ссылке http://ifolder.ru/13230392 кусочек дампа с ошибкой буквы "ш".

15

Re: Глобальная проблема с кодировкой!

Предыдущая проблема с нашими буквами решилась полным использованием Sypex Dumper. При импорте и экспорте буквы не пропадали.

Но вот незадача... буквы типа французских "?" все пропали....((((( Я даже базу залил, но потом уже заметил, что что-то не то... Вернул на место старую.
Что делать?

16

Re: Глобальная проблема с кодировкой!

Soft Alex
При перекодировке в cp1251 буквы "?" обязательно пропадут, так как отсутствуют в таблице символов этой кодировки. Таблицы с такими символами следует перекодировать сперва в latin1 и затем в utf8. Разумеется, это возможно только в случае, если символы кириллицы  и "?" не пересекаются в одной таблице.

17

Re: Глобальная проблема с кодировкой!

Hanut сказал:

Разумеется, это возможно только в случае, если символы кириллицы  и "?" не пересекаются в одной таблице.

Это плохо. Что можно придумать?

18

Re: Глобальная проблема с кодировкой!

Soft Alex
Если можете сделать тестовый дамп с проблемной таблицы, то отошлите, чтобы я попробовал его перекодировать.

19

Re: Глобальная проблема с кодировкой!

Я вам отправил письмо на hanut Собака php-myadmin.ru