Персональный БЛОГ

  • Личные заметки 8 новостей
  • Размышления 8 новостей
  • Цитаты 4 новости
  • Фишки и приколы 8 новостей
  • События 7 новостей
  • Кинорецензии 9 новостей
  • Мое творчество 4 новости
  • Дневник Алекса де Россо 3 новости
  • Перепачатка разрешается только при условии размещения follow-ссылки на источник.

    cp1251 и utf8 - За и Против

    20 октября 2011г. Личные заметки
    Буквально на днях начал работу над перекодировкой своего преокта RooCMS на UTF-8 и сумел на личном опыте убедиться во всех плюсах и минусах этих двух кодировок. Ниже я их описываю, без излешне технических описания, а лишь сам факт, потому что техническую сторону вопроса по большей части уже обмусолили на всех возможных ресурсах.

    Буквально перед этим я так же как и вы искал информация в интернете о сравнении этих кодировок. На удивление вся информация была крайне однообразной и явно копипастной. То есть из 50 ссылок, которые мне выдали Гугл и Яндекс, везде смысл статей был один и тот же. Если вы их читали, то уже знаете, что cp1251 весьма закостнелая кодировку, которой в скором времени предстоит кануть в летах, как и многим кодировкам, названия которых мы сейчас вспоминаем с трудом.

    Во всех статьях, что я нашел в поиске люди сравнивали побайтовость кодировк и угражающе говорили, что символы в utf8 занимают ровно в два раза больше места, чем в cp1251. Факт неоспоримый, потому что БД после кодировки немного увеличилась, как и шаблоны в которых были кирилические символы. А вот те файлы и ячейки таблицы, в которых кирилицы не было, остались такими же. То есть все таки не все символы в Unicode Text Format (о! абревиатурка оказывается) занимают места в два раза больше.

    Потом в тех же статьях все говорили о закостенелости программистов, которые привыкли работать в windows-1251. Я же лично думаю что проблема не в закостенелости, а отчасти в OS семейства Windows, которая всегда учит нас дурному, и отчасти в нежелание работать с мультибайтовыми символами. Да, да, да. Почти ни в одной статье я не нашел упоминаний о том, что есть такой маленький подводный булыжник как нежелание кирилического текста корректно обрабатываться в PHP при вызове строковых функций. А это что называется был сюрприз. Даже простейшие команды типа strtolower или strtoupper сжевывают текст превращая его в непереводимый набор символов. Все это потому, что строковые функции php не привыкли работать с мультибайтовыми строками. Они привыкли что один символ равен одному байту и все. Но в UTF это не так, вот они и обрезают лишний байт, тоесть обрабатывают лишь половину символа, отчего на выходе и получается ерунда какая то.

    Данная проблема несмертельна. Выход из неё простой, нужно установить для php расширение mbstring (опять абревиатура - multi bite string). И соответсвенно обрабатывать строки командами расширения - mb_strtolower или mb_strtoupper. Стоит так же заметить, что в расширении есть аналоги не для всех строковых функций. И для отсутсвующих функций придется самим писать функции перекодировщики с помошью расширение iconv (conv от слова convert, а вот i не знаю от чего). Но так что бы обойтись без расширений не получиться.

    Вот именно по этим причинам, многие программисты, наверное не работают с utf, а предпочитают виндосовскую кодировку. Все таки в России живем, а с ней отказоустойчивость будет выше и ненужно проверять есть ли расширения на хостинге или нет. Но на практике, фактически каждая хостинг площака в интернете по умолчанию ставит расширения mbstring и iconv. Так что вероятность того, что скрипт откажеться работать крайне низкая. И если все же откажеться, рекомендую обратить в службу поддержки хостера и попросить включить данные расширения (например на nic.ru все расширения по умолчанию выключены, и администратор сам их включает). Если же хостер невнятно пытается объяснить вам, что по каким то причинам не может включить данные расширения, то стоит задумать о смене хостера.

    На деле же премуществ у unicode гораздо больше. Например в отличии от виндовой кодировки, русские буквы и на китайских компьютерах выгледять русскими, а не непонятными символами. Поисковые системы с большей симпатией относятся к сайтам на unicode кодировке (ну оно и понятно, ведь такими сайтами сможет пользоваться весь мир, а не только отдельная страна). Ну и самое главное, по заявлению разработчиков php 6 версия, по умолчанию будет использовать ЮТФ. Опять же работать с таблицей символов из 10000 знаков, гораздо приятней чем с таблицей из 500 знаков.
    ← Предыдущая новость
    Как снимают рекламу
    Следующая новость →
    Рецепт: ЧПУ для Shop-Script

     
    Хотите зарабатывать на свеом сайте? Это проще чем кажеться. Никаких особых знаний не нужно. Подробности...
    Продвигать свой сайт в интернете, проще чем вам это кажеться. Специалисты берут уйму денег за свои услуги. Но можно это делать дешево и сердито, без особых знаний. Продвижение в поиске это просто.