Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: utf8 или windows-1251
 
 автор: aetern   (20.08.2009 в 12:40)   письмо автору
 
 

Скажите, что необходимо предусмотреть перед решением, какую использовать кодировку utf8 или windows-1251? Грубо говоря, в чем плюсы и минусы каждой кодировки. Если это где-то обсуждалось и есть "сводные таблицы", то буду очень признателен за ссылку.
Спасибо.

  Ответить  
 
 автор: heed   (20.08.2009 в 15:21)   письмо автору
 
   для: aetern   (20.08.2009 в 12:40)
 

>что необходимо предусмотреть

например ,бывает нужно учесть что например текст с русскими буквами весит больше байт в utf-8 чем в cp1251

, что при добавлении в поле типа TEXT mysql после отправленного SET NAMES 'utf8' могут посыпяться ошибки
Incorrect string value: '\xD1\xE5\xF0\xE2\xE5\xF0...' for column ......
при попытке добавить туда текст в cp1251

, что в php (версий <= 5.2 на вчерашний день точно) посчитать длинну строки простым strlen() можно только в байтах ,и придётся пользоваться установленой mbstring
, будет предпочтительней использовать
аналоги стандартных функций
mail() mb_send_mail()
strlen() mb_strlen()
strpos() mb_strpos()
strrpos() mb_strrpos()
substr() mb_substr()
strtolower() mb_strtolower()
strtoupper() mb_strtoupper()
substr_count() mb_substr_count()
ereg() mb_ereg()
eregi() mb_eregi()
ereg_replace() mb_ereg_replace()
eregi_replace() mb_eregi_replace()
split() mb_split()

и mbstring может быть задействована в конфигурирование, влияя на кодировку принимаемых данных

Example #1 Disable HTTP input conversion in php.ini
;; Disable HTTP Input conversion
mbstring.http_input = pass
;; Disable HTTP Input conversion (PHP 4.3.0 or higher)
mbstring.encoding_translation = Off

, создание/обращение (/к). файл(ов/ам) и пап(ок/ам):) с именами отличными от имён в кодировке поддерживаемой системой может не приносить желаемыъх результатов,)

, вобщем куча проблем , за исключением того что AJAX ,
MySQL, XML... заточено под utf-8

  Ответить  
 
 автор: Loki   (20.08.2009 в 16:53)   письмо автору
 
   для: heed   (20.08.2009 в 15:21)
 

>создание/обращение (/к). файл(ов/ам) и пап(ок/ам):) с именами отличными от имён в кодировке поддерживаемой системой может не приносить желаемыъх результатов,)
Стоит однако заметить, что никсовая консоль сейчас юникодная.

  Ответить  
 
 автор: Владимир55   (20.08.2009 в 22:02)   письмо автору
 
   для: Loki   (20.08.2009 в 16:53)
 

У меня сложилось впечатление, что переход на utf-8 неизбежен. Лично я не понимаю, что там такого существенного, ради чего потребуется переделывать уже работающие сайты. Но меня беспокоит вот что: неужели все сайты, использующие 1251, начиная с какогото момента времени перестанут нормально показываться в сети?

  Ответить  
 
 автор: Trianon   (20.08.2009 в 23:44)   письмо автору
 
   для: Владимир55   (20.08.2009 в 22:02)
 

1251 представляет весьма ограниченное число языков.
utf8 никаких ограничений на языки не накладывает.
Этим и существенно.

  Ответить  
 
 автор: Владимир55   (21.08.2009 в 00:06)   письмо автору
 
   для: Trianon   (20.08.2009 в 23:44)
 

Я всё же не пойму суть этого ограничения.
Если сайт на русском плюс латиница, то зачем ему нужна кодировка, включающая какой-либо другой язык?

  Ответить  
 
 автор: Евгений Петров   (21.08.2009 в 00:24)   письмо автору
 
   для: Владимир55   (21.08.2009 в 00:06)
 

Например вы хотите цитату на китайском вставить. Можно конечно на html написать но тогда искать по такому тексту очень сложно будет в базе. Так же есть другие символы которые не входят в cp1251 например символ евро
&euro;
. Если мне не изменяет память в cp1251 его нету, хотя могу и ошибаться.

  Ответить  
 
 автор: Владимир55   (21.08.2009 в 01:59)   письмо автору
 
   для: Евгений Петров   (21.08.2009 в 00:24)
 

Если так, то да, utf8 имеет существенное преимущество.

  Ответить  
 
 автор: coloboc66   (21.08.2009 в 09:59)   письмо автору
 
   для: Владимир55   (21.08.2009 в 01:59)
 

Я понял это преимущество спустя года четыре после установки своего сайта. После того, как это понял (вернее - возникла насущная необходимость многоязыковой поддержки, да и вап-сайтам нужен Юникод), дня три мудохался - переводил весь сайт в Юникод. Если кто только начинает заниматься веб-сайтами - лучше СРАЗУ ВСЁ делать в Юникоде (utf-8).
Простой пример: хранились у меня данные в файлах. Я решил их хранить в XML - очень удобно их разбирать. Пришлось кодировки все переделывать под юникод, т.к. в вин-1251 некорректно работало.

  Ответить  
 
 автор: Loki   (21.08.2009 в 10:13)   письмо автору
 
   для: Владимир55   (21.08.2009 в 01:59)
 

Можно сказать проще: все современные технологии требуют юникода. Так что сайт на юникоде означает что если/когда вам потребуется дополнить его функционалом, то вам не придется заниматься кодировками и их преобразованием.

  Ответить  
 
 автор: aetern   (21.08.2009 в 20:42)   письмо автору
 
   для: Loki   (21.08.2009 в 10:13)
 

Значит можно сделать такой вывод: если сайт задумывается с дальнейшим развитием и претендует на что-то глобальное и мультиязычное, то делаем utf8, если же это сайт без изысков, со стандартным набором русских символов, то cp1251.

А вот интересно, время загрузки одного рускоязычного сайта в обсуждаемых кодировках одинаково?

  Ответить  
 
 автор: !   (21.08.2009 в 21:19)
 
   для: aetern   (21.08.2009 в 20:42)
 

В UTF-8 не только "иноязычные символы", но и специальные, вроде приведенного символа евро, поэтому неудобства будут чувствоваться до перехода в "глобальное и мультиязычное".

Кстати, vkontakte на windows-1251, но там видны все символы, поскольку не затрагиваются последовательности "&#N;" и "&#xH;", но зато становится трудным передача текста "как есть". Придётся "&" переводить в "&#38;". Поэтому использовать vkontakte в качестве решения проблем веб-программирования не выйдет.

Время загрузки формально конечно будет дольше, только на фоне нынешних скоростей оно не играет роли.

  Ответить  
 
 автор: Akdmeh   (21.08.2009 в 21:24)   письмо автору
 
   для: aetern   (21.08.2009 в 20:42)
 

Разное.
Не забывайте, в utf-8 один русский символ==два байта.
А вообще, ЮЗАЙТЕ unicode, это позволит использовать типографские символы типу «» ° — … © .......

  Ответить  
 
 автор: Fractured   (21.08.2009 в 21:34)   письмо автору
 
   для: Akdmeh   (21.08.2009 в 21:24)
 

> А вообще, ЮЗАЙТЕ unicode, это позволит использовать типографские символы типу «» ° — … © .......

Эти символы есть и в windows-1251

  Ответить  
 
 автор: Akdmeh   (22.08.2009 в 11:53)   письмо автору
 
   для: Fractured   (21.08.2009 в 21:34)
 

Да, извините, это есть. но не все. таких нет: &#9786;&#9787;&#9829;&#9830;&#9827;&#9824;•&#9688;&#9675;&#9834;&#9658;&#9788; :)
Да... Правда я забыл, что на форуме кодировка Windows-1251:)

  Ответить  
 
 автор: Trianon   (22.08.2009 в 00:33)   письмо автору
 
   для: aetern   (21.08.2009 в 20:42)
 

а если просят сайт на литовском? Эстонском? Украинском языке?

  Ответить  
 
 автор: Евгений Петров   (22.08.2009 в 00:48)   письмо автору
 
   для: Trianon   (22.08.2009 в 00:33)
 

> Украинском языке?
Кстати в 1251 есть символы і, ґ, є, ї )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования