Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] перекодировка сайта с cp1251 в utf8 (http://forum.oszone.net/showthread.php?t=86600)

VeshchiyOleg 08-07-2007 14:19 609990

перекодировка сайта с cp1251 в utf8
 
вопрос наверняка не нов:
есть сайт - всё в кодировке cp1251
необходимо переконвертить его в utf8

вот как я это себе вижу
1. переконвертировать все файлы - это просто: редактором (я пользуюсь PHP Expert Editor)
2. переконвертация БД mysql - как?
3. замена html и xml заголовков с cp1251 на utf-8 (для браузеров) - это тоже не вызовет проблем
4. изменение обработки строк в javascript`ах - для Ajax и проч. js

с чем я еще могу столкнуться?
сайт работающий и не хотелось бы надолго прекращать его работу
т.е. статичные данные (п.п. 1, 3, 4) я исправлю offline, а как выполнить изменение динамических данных (п. 2) быстро и без последствий?

FADE 08-07-2007 19:12 610067

VeshchiyOleg с помощью дублера например, делаете копию сайта изменяете ее, после тестирования и работоспособности копией меняете реальный сайт :)

VeshchiyOleg 08-07-2007 21:40 610130

дублер это само собой
как переконвертировать ДАННЫЕ mysql?

vadimiron 08-07-2007 21:50 610140

VeshchiyOleg
начните с этой статьи. Только не переписываем оригинальные данные :)!!! Сначало всё в копию записываем.

Дальше в гугле можно искать по "mysql migrate utf8" или чтото подобное

VeshchiyOleg 11-07-2007 15:36 611589

не совсем то.
мне мой админ потом разъяснил, как правильно:
Код:

shell> mysqldump --default-character-set=cp1251 db_name >file_name.sql
shell>iconv -f cp1251 -t utf-8 file_name.sql > new_file_name.sql
shell> mysql
mysql> create datatabase newdb;
mysql> exit
shell> mysql --default-character-set=utf-8 newdb < new_file_name.sql

но...
iconv не работает по каким-то причинам...
говорит, что не может - якобы там, внутри, есть что-то, что не поддается перекодированию
в 400 Мб -ном файле найти это практически нереально
или для iconv'а он слишком велик...

короче, я сейчас обошелся
PHP код:

@mysql_query('SET NAMES utf8'); 

сразу после mysql_connect
работает, но это решение мне как-то не очень нравится...

vadimiron 11-07-2007 15:58 611607

Цитата:

Цитата VeshchiyOleg
короче, я сейчас обошелся PHP код: @mysql_query('SET NAMES utf8'); сразу после mysql_connect

Я всегда этим пользуюсь - и никаких проблем

Prisoner 17-07-2007 18:47 614842

Аналогом @mysql_query('SET NAMES utf8'); может служить "default-character-set=cp1251" в секциях [client] и [mysqld] конфигурационного файла сервера БД MySQL. Разница тут в том, что второй вариант - глобальный (действует на все базы и на все соединения и выборки), но выполняется лишь однажды, а второй каждый запуск скрипта, но более гибок когда существуют базы с разными кодировками. В общем и целом оба варианта жизнеспособны, имхо, не стоит коситься ни на один из них.

mar 18-07-2007 13:18 615207

Цитата:

Цитата VeshchiyOleg
iconv не работает по каким-то причинам... говорит, что не может - якобы там, внутри, есть что-то, что не поддается перекодированию

Совершенно нормальная ситуация при перекодировании всяких служебных значков. SET NAMES с default-character-set при этом отрабатыват под mysql. А вот при переносе базы под postgresql могут быть проблемы (приходится писать скрипт для отлова всего этого безобразия)


Время: 10:10.

Время: 10:10.
© OSzone.net 2001-