пятница, 12 февраля 2010 г.

Русские символы в UTF-8

После поиска по запросу стала задача о выделении совпадений с искомой строкой. Кодировка на сайте UTF-8. С латинскими символами не возникло никаких проблем, stripos и str_ireplace работали замечательно. Но как только появлялись русские символы сразу начинались проблемы. Сначала заметил что функции стали как-бы регистрозависимые. Решил использовать strtolower для перевода всего в строчные символы. Это не помогло. при отладке увидел что strtolower не переводит русские символы в нижний регистр. Погуглив по интернету прочел что строковые функции php не очень (это мягко сказано) дружат с кириллицей в кодировке UTF-8. Перевод из UTF-8 в cp1251 тоже ничего не принес!!! Осталось только решение использовать регулярные выражения несмотря на то что они работают дольше строковых функций php. Используя модификатор i избавился от зависимости от регистра, потом нашел второй модификатор (о котором почему-то не везде упоминают) u. Он означает что шаблон поиска(замены) следует рассматривать как UTF-8. Благодаря этим 2 модификаторам и функциям preg_match и preg_replace сильно упростил себе жизнь и экономию времени в будущем.(Хотя на поиски решения пришлось потратить несколько часов:-))
Для себя понял что имея дело с кириллицей надо использовать регулярные выражения и не париться по поводу регистров и всего прочего.