За последние 24 часа нас посетили 15073 программиста и 1680 роботов. Сейчас ищут 1113 программистов ...

переход сайта с CP1251 на юникод

Тема в разделе "PHP для новичков", создана пользователем antonn, 18 фев 2009.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Типа новичек :)
    Значит, есть сайт, нужно его с CP1251 перегнать на юникод, пока две проблемы. Строковые функции и регулярки. Слышал, что с помощью mbstring можно перегрузить стандартные функции, остаются регулярки (preg). Просто добавление модификатора u решит проблемы? Какие есть подводные камни, в том числе с мусклом?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Если строковые функции используются только для того, чтобы их использовать с обычным текстом, то проблем быть не должно при оверлоаде.

    С mysql вобще не будет проблем
    [sql]SET NAMES utf8[/sql]
     
  3. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    да, функции типа strpos(), substr(), strlen(), str_replace().
    Вот еще типа таких html_entity_decode(), wordwrap() тоже нормально себя ощущают?

    и пока сильно интересуют регулярки :(
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    не нормально себя ощущает. Глянь в доке, там написано на какие функции какой уровень оверлоада влияет.

    В регулярках достаточно u.
     
  5. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    когда то натыкался на ссылку, там было на русском расписано какие функции корячатся с utf, можешь подсказать?
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  7. unicross

    unicross Активный пользователь

    С нами с:
    14 янв 2009
    Сообщения:
    194
    Симпатии:
    0
    Будут и SET NAMES utf8 здесь не поможет. :(

    Источник http://dev.mysql.com/doc/refman/5.1/en/regexp.html

    antonn, если регулярки в MySQL не используете, то все будет нормально.
     
  8. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    использую :(
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    antonn
    Много ли у тебя мультибайтных символов?
     
  10. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Kreker
    честно - не читал :) вопроса не пойму :)
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    antonn
    Там написано, что с мультибайтными строками могут происходить неожиданный фигли.
    Насколько мне известно, кириллица и латынь принадлежит входят в область однобайтных символов, поэтому баги нам не страшны, если я не ошибаюсь.
     
  12. unicross

    unicross Активный пользователь

    С нами с:
    14 янв 2009
    Сообщения:
    194
    Симпатии:
    0
    Кириллица кодируется двумя байтами в 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]
    Как видно из примера, возникла проблема при указании строгой привязки к началу и концу строки. Даже указание русских символов в двух регистрах не решило проблему.
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    :shock: Блин. Точно. Только сейчас заметил, что количество символов в текстовом редакторе умножается на два, при кодировке UTF-8.
    Когда-то в чьем-то блоге читал, как хорошо UTF-8, и там было написано, что эта кодировка занимает места столько же, сколько и win-1251, потому что русские символы однобайтные.
     
  14. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Первые 128 кодов однобайтные.
     
  15. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    если бы мне нужно было только инглиш и русский я бы с юникодом не связывался :)
    а так обломс...
     
  16. unicross

    unicross Активный пользователь

    С нами с:
    14 янв 2009
    Сообщения:
    194
    Симпатии:
    0
    А для чего вообще используете регулярки в MySQL? Приведите пример.
    Почему не устаивает LIKE ? С ним проблем нет... :D
     
  17. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    :shock: как ты мог не знать?
     
  18. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    unicross
    найди слово(!) начинающееся на "ва", не находящееся в параметрах тегов (html или bbcodes) и чтобы в тексте не встречалась подстрока "пупкин" :)