Комментарии 30
Давно искал подобное для реализация парсинга входных данных в вебе. Спасибо большое!
Изиняюсь, а что значит входные данные в вебе?
Наверное имелись ввиду сграбленные веб-страницы, из которых потом нужно полезный контент как-то выдрать
Ага, ну я думаю тут все-таки Content-type поприоритетней будет
Увы, некоторые недобраузеры игнорируют Content-Type при определенных условиях.
Ну и вопросец… сейчас не вспомню — год уже прошел.
Ваши опыты немного не в той степи — глюки с кодировками возникают в передаваемых браузером POST- и GET-данных, а не в выводе страницы с заданной кодировкой.
Ваши опыты немного не в той степи — глюки с кодировками возникают в передаваемых браузером POST- и GET-данных, а не в выводе страницы с заданной кодировкой.
Нет, все проще — GET/POST/Cookies. Там иногда белиберда приходит вместо UTF-8, не будем уточнять от кого.
Одобрямс, а давай так каждую вторую субботу по статейке и корпоративный блог будет =)
А ничего, что вероятность «яЯ» нужно считать нулевой?! :)
По-хорошему, частоты регистров надо смотреть фактические, как и были.
Единственное, что «оба капсом» допустимы частоты, а разномиксовые — надо смотреть только на началах слов.
По-хорошему, частоты регистров надо смотреть фактические, как и были.
Единственное, что «оба капсом» допустимы частоты, а разномиксовые — надо смотреть только на началах слов.
Кстати, да. Что-то местами по частотам больше похоже на дамп базы лирушечки, чем на «Войну и мир» :)
Может быть лучше вообще убрать из дампа Аа и аА, а оставить только маленькими и капсом? Сразу так не скажешь, но вполне возможно, что вы и правы. Просто я когда это писал, руководствовался тем, что нам вообще какбы неважен регистр, поэтому и вставил все вариации. Ну И МоЖНо ПРиДумАть ПрИМер, когда анализатор, как мне кажется, обломается, если убрать варианты аА.
Прошу прощения, но может изпользование mb_detect_encoding() все-таки лучше? Или был чисто профессиональный интерес реализовать алгоритм?
Мне как-то раз надо было определить кодировку текста сграбленных страниц в вебе, тоже на PHP. Все, что я в инете находил на эту тему — было какое-то босяцкое, с множеством условий каких-то и ограничений. Самое дельное, что я находил, было для питона, сейчас уж не вспомню, что это было…
Я че-то голову сломал, и начал думать, ну почему нету какой-нибудь нормальной библиотеки/модуля, как в браузерах, они ж хорошо определяют кодировку… И тут в буквальном смысле над моей, уже наверно дымящейся, головой, загорелась лампочка озарения :)
Я, одухотворенный, пошел и скачал исходники фокса, выдернул оттуда модуль определения кодировок, написал строк в 15-20 main.cpp и скомпилировал это все в исполняемый файл linux) Работает супер)
Я че-то голову сломал, и начал думать, ну почему нету какой-нибудь нормальной библиотеки/модуля, как в браузерах, они ж хорошо определяют кодировку… И тут в буквальном смысле над моей, уже наверно дымящейся, головой, загорелась лампочка озарения :)
Я, одухотворенный, пошел и скачал исходники фокса, выдернул оттуда модуль определения кодировок, написал строк в 15-20 main.cpp и скомпилировал это все в исполняемый файл linux) Работает супер)
freshmeat.net/projects/enca/ вам в помощь :-)
А каким алгоритмом PCRE распознаёт кодировку UTF-8? Т.е. меня интересует эта строчка
preg_match('#.#u', $str_utf8);
Что происходит внутри этого вызова? Проверяются начальные биты в каждом байте?Судя по всему проверяются начальный байт в каждой паре байтов. И если нашли хоть один UTF8-символ — возвращаем TRUE. Ну это как мне кажется.
Ну да, это самый очевидный способ. А почему в паре? В utf8 символ может состоять из 1-4 байт.
Насколько я знаю, те символы, что из 1 байта никак не отличаются от обычной ASCII.
Обернул в класс и добавил вашу же проверку на utf-8, форк вашего кода — github.com/cnpait/detect_encoding
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Определение кодировки текста в PHP, часть 2 — биграммы