Типа новичек Значит, есть сайт, нужно его с CP1251 перегнать на юникод, пока две проблемы. Строковые функции и регулярки. Слышал, что с помощью mbstring можно перегрузить стандартные функции, остаются регулярки (preg). Просто добавление модификатора u решит проблемы? Какие есть подводные камни, в том числе с мусклом?
Если строковые функции используются только для того, чтобы их использовать с обычным текстом, то проблем быть не должно при оверлоаде. С mysql вобще не будет проблем [sql]SET NAMES utf8[/sql]
да, функции типа strpos(), substr(), strlen(), str_replace(). Вот еще типа таких html_entity_decode(), wordwrap() тоже нормально себя ощущают? и пока сильно интересуют регулярки
не нормально себя ощущает. Глянь в доке, там написано на какие функции какой уровень оверлоада влияет. В регулярках достаточно u.
когда то натыкался на ссылку, там было на русском расписано какие функции корячатся с utf, можешь подсказать?
Будут и SET NAMES utf8 здесь не поможет. Источник http://dev.mysql.com/doc/refman/5.1/en/regexp.html antonn, если регулярки в MySQL не используете, то все будет нормально.
antonn Там написано, что с мультибайтными строками могут происходить неожиданный фигли. Насколько мне известно, кириллица и латынь принадлежит входят в область однобайтных символов, поэтому баги нам не страшны, если я не ошибаюсь.
Кириллица кодируется двумя байтами в UTF-8! Проблемы будут... [sql]SELECT 'Строка' RLIKE '^[а-я]+$'; /* Выведет: 0 */ SELECT 'Строка' RLIKE '^[а-яА-Я]+$'; /* Выведет: 0 */ SELECT 'Строка' RLIKE '^[а-я]+'; /* Выведет: 1 */ SELECT 'СтрокА' RLIKE '[а-я]+$'; /* Выведет: 0 */ SELECT 'СтрокА' REGEXP '[а-яА-Я]+$'; /* Выведет: 1 */ SELECT 'Строка' RLIKE '[а-я]+$'; /* Выведет: 1 */ /* Проверка кодировки и кодовой таблицы */ SELECT CHARSET('Строка'); /* Выведет: utf8 */ SELECT COLLATION('Строка'); /* Выведет: utf8_general_ci */[/sql] Как видно из примера, возникла проблема при указании строгой привязки к началу и концу строки. Даже указание русских символов в двух регистрах не решило проблему.
:shock: Блин. Точно. Только сейчас заметил, что количество символов в текстовом редакторе умножается на два, при кодировке UTF-8. Когда-то в чьем-то блоге читал, как хорошо UTF-8, и там было написано, что эта кодировка занимает места столько же, сколько и win-1251, потому что русские символы однобайтные.
А для чего вообще используете регулярки в MySQL? Приведите пример. Почему не устаивает LIKE ? С ним проблем нет...
unicross найди слово(!) начинающееся на "ва", не находящееся в параметрах тегов (html или bbcodes) и чтобы в тексте не встречалась подстрока "пупкин"