Pull to refresh

Comments 17

немного офтопика: в php есть константа PHP_EOL и введена она не спроста :)
Да, в курсе про такую :) Я уже просто привык к *nix'овым окончаниям… благо везде, где хостимся — *nix.

Это Вы про мои print'ы? ;)
Да я именно о принтах. а по поводу никсовых окончаний: PHP_EOL платформозависима и в никсах будет именно то что нужно ;)
Знаю, знаю :) Я ж пишу то, что мне привычнее \n написать, чем рвать строку и вставлять константу. Хотя в реально критичных местах всегда ее использую.
Спасибо за топик. Не знал, что /u работает не со всеми сочетаниями…
Ключ «/u» вообще отвратно работает, по большому счету… Костыль так себе.
Ключ /u работает так, как и должен работать. Если вы ожидаете что он будет работать как-то по другому — обоснуйте. В документации объясняется почему \w для Unicode смысла не имеет, например. Вы можете использовать \p{L} или (рекомендуемый консорциумом) когломерат (?:\p{L}|\p{M}|\p{D}|\p{Pc}) или ещё чего — это от вашей фантазии зависит…
Я подразумевал, что логичнее было бы в режиме /u рассматривать \w как любой символ буквы или цифры, по аналогии с не-юникодным режимом.

Иными словами [\w] рассматривать как [\p{L}\p{Nd}], тогда, по сути, большинство паттернов стали бы юникодными после простого добавления ключа /u. Это с точки зрения совместимости при переходе с однобайтной кодировки на UTF-8.

Но раз этого нет, то скорее всего на это есть объективные причины. Если знаете — поделитесь, в документации про ключ /u ничего не нашел (смотрел в разделе «PASSING MODIFIERS TO THE REGULAR EXPRESSION ENGINE» и просто поиском по документу).
Matching characters by Unicode property is not fast, because PCRE has to search a structure that contains data for over fifteen thousand characters. That is why the traditional escape sequences such as \d and \w do not use Unicode properties in PCRE.

Всё чётко и понятно, по-моему. Конечно для PHP все эти ухищрения особого смысла не имеют (такого идиотского интерфейса к регулярным выражениям как в PHP я нигде и никогда не видел), но библиотека-то не под PHP затачивалась! Потому для быстрой работы с символами до 127 остались \w и \d (которые никогда не матчатся на символы с кодами более 127), а для всех остальных — пожалуйста, \P. Куда обиднее что нету \b нормального — его заменить на набор \p не удастся…
Ну да, все логично, я просто не то искал :)

Пожалуй, бОльшая в разы скорость работы все же поважнее совместимости, хотя из-за этого старый проект на UTF будет проблемно переставлять, если много где используются регулярные выражения. Но что-то мне подсказывает, что там, где в однобайтном использовалось \w, кириллица и прочее должны match'иться, т.к. иначе бы использовалось [a-z0-9]…
Знаете, что меня больше всего бесит в кодировках?

Неоднозначность названий… Где-то надо win-1251, где-то cp1251, где-то windows-1251, а еще где-то win1251… Даже UTF-8 можно (или даже нужно) иногда писать как UTF8…

По-моему правильно — это CP1251 и UTF8|UTF16|UCS2BE и т.д. и никаких тире или пробелов, ну почему хоть это-то никак не могут стандартизовать…

Я вчера весь мозг сломал, вспоминая как правильно — UCS-2BE или UCS2-BE…
недавно перешли с 1251 на UTF-8.
Всем довольны, все прекрасно, но уже третий день наблюдаю странную вещь — часть (меньшая, к счастью) пользователей шлет данные формы в cp1251

как победить — идей пока нет
Следует проанализировать заголовки запросов от таких клиентов. Собственно, заголовки в студию, без них что-то определенное сказать не получится…
воткнул apache_request_headers(), посмотрим. Я так понимаю, смотреть надо на AcceptLanguage?
вот парочка

'Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*',
'Accept-Language' => 'ru',
'Accept-Encoding' => 'gzip, deflate',
'User-Agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.10 (build 01952))',
'Connection' => 'Keep-Alive',

— 'Accept' => '*/*',
'Accept-Language' => 'ru',
'UA-CPU' => 'x86',
'Accept-Encoding' => 'gzip, deflate',
'User-Agent' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.10 (build 01952); MRSPUTNIK 1, 8, 0, 17 SW)',
'Connection' => 'Keep-Alive',

Only those users with full accounts are able to leave comments. Log in, please.

Articles