Как стать автором
Обновить

Комментарии 26

ух ты, спасибо!
Хорошо бы предупредить людей, которые всё это будут творить что
1. В базе данных могут случиться всякие .gif и .jpg (аватары, скажем), которые после конвертировани из windows-1251 в utf-8 сломаются (впрочем это редкость)
2. Почти 100% гарантия того, что где-нибудь в PHP-коде есть неявное предположение: 1 символ == 2 байт, так что сайт нужно после конвертации долго тестировать (не забудьте редко используемые части типа регистрации на сайте и высылки письма с паролем!)
1. Спасибо, пердупредим :)
2. Насчет тестирования очень верно - неприятные моменты все-равно будут - гарантированно. Тестить обязательно!
Не стоит забывать что код php нужно будет перепроверять!
Функции работы с строками должны быть заменены на их multibyte-аналоги.
Например strlen - покажет неверное кол-во символов строки, содержащей UTF-8,
а mb_strlen - посчитает верно.
Мне ненадо, но спасибо за труды все равно, вдруг понадобится.
НЛО прилетело и опубликовало эту надпись здесь
Спасибо за поправки, учел.
Еще знающие люди посоветовали:

" 4m@t!c комментирует...

Достаточно одного запроса "SET NAMES utf-8", которая в том числе изменит CHARSET
Не обязательно конвертировать дампы iconv. мжно сделать это с помощью ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
"
Замечание про ALTER TABLE - правильное и неправильное одновременно. Оно блокирует базу всё равно, а backup'а у вас не остаётся. Хотя всё зависит от конкретной ситуации, конечно...
поэтому в статье есть ремарка: "...сделать это на тестируемой БД"
А что делает ключ -a в команде cp?
В cp на FreeBSD такого ключа нет, насколько я нагуглил сейчас - в linux тоже..
-a, --archive
-regextype posix-extended пришлось выкинуть совсем и сделать через grep (для большей совместимости с ранними версиями), в связи с чем сам скрипт существенно изменился.
Не могли бы Вы подсказать будет ли он теперь работать в FreeBSD?
А кодировку отдачи можно и в .htaccess задать:
AddDefaultCharset UTF-8
Да, то-же вариант, но если есть доступ к конфигурации лучше это сделать там. Т.к. плодить .htaccess, который будет "выдергиваться" при каждом запросе, помоему не очень хорошо.
Просто не всегда есть доступ к конфигу. Особенно на дешевом хостинге. А еще бывают случаи, когда необходиом назначить кодировку «локально», для одной папочки :) Вот буквально вчера родилась такая необходимость. И другого варианта на серваке клиента предусмотреть было невозможно :)
> iconv: недопустимая входная последовательность в позиции 1663
у iconv есть специальная опция "-c" для пропуска подобных символов
man iconv
Хм-м, что-то на Fedora 7 я невижу такой опции :(
у меня тоже Fedora 7:
$ rpm -qf `which iconv`
glibc-common-2.6-3
$ iconv -V
iconv (GNU libc) 2.6
$ iconv --help
...
Output control:
-c omit invalid characters from output

а в мане iconv как раз неполно описан
Спасибо, опция действительно работает
Всё же, насколько я помню, в оригинале «Лучше день потерять, потом за 5 минут долететь». ;-)
Значит я уже забывать стал :(
НЛО прилетело и опубликовало эту надпись здесь
а сайт уже функционирует на мастдае или ето только тестовая его версия?
НЛО прилетело и опубликовало эту надпись здесь
а для ms windows есть какой-нибуть софт для перекодировки между cp-1251 & utf-8? желательно туда и обратно. может кто-то встречалса из таким... просто заказчик настоятельно хочет, чтоб его сайт в cp1251 виводилса... а я начал делать на unicode...
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории