Pull to refresh

Comments 30

Давно искал подобное для реализация парсинга входных данных в вебе. Спасибо большое!
Изиняюсь, а что значит входные данные в вебе?
Наверное имелись ввиду сграбленные веб-страницы, из которых потом нужно полезный контент как-то выдрать
Ага, ну я думаю тут все-таки Content-type поприоритетней будет
Увы, некоторые недобраузеры игнорируют Content-Type при определенных условиях.
При каких? Мои опыты показывают, что не игнорируют таки.
Ну и вопросец… сейчас не вспомню — год уже прошел.
Ваши опыты немного не в той степи — глюки с кодировками возникают в передаваемых браузером POST- и GET-данных, а не в выводе страницы с заданной кодировкой.
Да нет, он именно о том. Могу авторитетно заявить. Опыт именно про Content-Type и я пока еще не встречал ни одного браузера который бы этот заголовок игнорировал. Если конечно заголовок сформирован корректно (привет IE и utf8 vs utf-8).
Нет, все проще — GET/POST/Cookies. Там иногда белиберда приходит вместо UTF-8, не будем уточнять от кого.
у этого «от кого» обычно два варианта — utf-8 и 1251, различить их и исправить неправильный вариант несложно — редкий осмысленный текст в 1251 случайно окажется валидным utf-8.
А если вы находитесь в Индии, к примеру?
Одобрямс, а давай так каждую вторую субботу по статейке и корпоративный блог будет =)
А ничего, что вероятность «яЯ» нужно считать нулевой?! :)
По-хорошему, частоты регистров надо смотреть фактические, как и были.
Единственное, что «оба капсом» допустимы частоты, а разномиксовые — надо смотреть только на началах слов.
Кстати, да. Что-то местами по частотам больше похоже на дамп базы лирушечки, чем на «Войну и мир» :)
Может быть лучше вообще убрать из дампа Аа и аА, а оставить только маленькими и капсом? Сразу так не скажешь, но вполне возможно, что вы и правы. Просто я когда это писал, руководствовался тем, что нам вообще какбы неважен регистр, поэтому и вставил все вариации. Ну И МоЖНо ПРиДумАть ПрИМер, когда анализатор, как мне кажется, обломается, если убрать варианты аА.
Прошу прощения, но может изпользование mb_detect_encoding() все-таки лучше? Или был чисто профессиональный интерес реализовать алгоритм?
В прошлой статье (ссылка вверху этой) писал об этом. К сожалению, использовать mb_detect_encoding() не получится в этих целях — она не работает )
Мне как-то раз надо было определить кодировку текста сграбленных страниц в вебе, тоже на PHP. Все, что я в инете находил на эту тему — было какое-то босяцкое, с множеством условий каких-то и ограничений. Самое дельное, что я находил, было для питона, сейчас уж не вспомню, что это было…
Я че-то голову сломал, и начал думать, ну почему нету какой-нибудь нормальной библиотеки/модуля, как в браузерах, они ж хорошо определяют кодировку… И тут в буквальном смысле над моей, уже наверно дымящейся, головой, загорелась лампочка озарения :)
Я, одухотворенный, пошел и скачал исходники фокса, выдернул оттуда модуль определения кодировок, написал строк в 15-20 main.cpp и скомпилировал это все в исполняемый файл linux) Работает супер)
Поделитесь принципом работы этого модуля в Фаерфоксе в двух словах
А каким алгоритмом PCRE распознаёт кодировку UTF-8? Т.е. меня интересует эта строчка
preg_match('#.#u', $str_utf8);
Что происходит внутри этого вызова? Проверяются начальные биты в каждом байте?
Судя по всему проверяются начальный байт в каждой паре байтов. И если нашли хоть один UTF8-символ — возвращаем TRUE. Ну это как мне кажется.
Ну да, это самый очевидный способ. А почему в паре? В utf8 символ может состоять из 1-4 байт.
Насколько я знаю, те символы, что из 1 байта никак не отличаются от обычной ASCII.
Если пара = «больше одного», то да, верно) <зануда mode on>Только зачем пары находить? Не проще ли просто проверять каждый байт до тех пор, пока не найдёшь нужные биты в начале?
Да я примерно сказал. Чего вы занудничаете) Кто ж его знает, во что скомпилится в конечном счете регулярка '#.#u'
Супер! Может сразу тогда уже и к composer прикрутить его?
Sign up to leave a comment.

Articles