PDA

Показать полную графическую версию : [решено] перекодировка сайта с cp1251 в utf8


VeshchiyOleg
08-07-2007, 14:19
вопрос наверняка не нов:
есть сайт - всё в кодировке 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
VeshchiyOleg с помощью дублера например, делаете копию сайта изменяете ее, после тестирования и работоспособности копией меняете реальный сайт :)

VeshchiyOleg
08-07-2007, 21:40
дублер это само собой
как переконвертировать ДАННЫЕ mysql?

vadimiron
08-07-2007, 21:50
VeshchiyOleg
начните с этой (http://www.hackszine.com/blog/archive/2007/05/mysql_database_migration_latin.html) статьи. Только не переписываем оригинальные данные :)!!! Сначало всё в копию записываем.

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

VeshchiyOleg
11-07-2007, 15:36
не совсем то.
мне мой админ потом разъяснил, как правильно:
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'а он слишком велик...

короче, я сейчас обошелся @mysql_query('SET NAMES utf8'); сразу после mysql_connect
работает, но это решение мне как-то не очень нравится...

vadimiron
11-07-2007, 15:58
короче, я сейчас обошелся PHP код: @mysql_query('SET NAMES utf8'); сразу после mysql_connect

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

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

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




© OSzone.net 2001-2012