Feb 04

…По моему никогда…

Написать пост меня вынудила офигенная вещь в пхп, связанная с regexp‘ами и юникодом.

Возьмем регексп “/[^[:alnum:]]/” (alnum - любая буква или цифра). Он значит буквально следующее: “всё, что не является буквой или цифрой“. Возьмем функцию preg_replace и попробуем из строки, содержащей русские буквы в юникоде удалить “всё, что не является буквой или цифрой“: preg_replace(”/[^[:alnum:]]/”, “”, $string).

По логике вещей - должно работать. С латинскими буквами действительно проблем не возникает. С русскими буквами, если они записаны в Win-1251 тоже… Но запустите у себя на сервере такой скрипт:

<?php
$string = "абвгдеёжзийклмонпрстуфхцчшщьыъэюя";
echo preg_replace("/[^[:alnum:]]/", "", $string);
?>

Причем файл, в котором будет это написано должен быть сохранен в UTF8.

PS. Напомню, что ДОЛЖЕН этот скрипт вывести строку без изменений.

written by fxposter \\ tags: ,


8 Responses to “PHP + Unicode = когда?”

  1. 1. FX Poster Says:

    В дополнение к посту – нашел линк, показывающий количество “unicode-compatible”-функций: http://www.php.net/~scoates/unicode/render_func_data.php

  2. 2. Sam Says:

    PHP Unicode = Уже давно…

    Для preg надо поставить модификатор u. Для нормальной работы со строками есть расширение multibyte, которое, кстати, можно заставить прозрачно заменить стандартные функции.

  3. 3. FX Poster Says:

    Насчет “u” не знал, спасибо.
    А вот насчет мультибайт… Все-таки хочется, чтобы юникод в ядре поддерживался.

    
    $string = "абвгдеёжзийклмонпрстуфхцчшщьыъэюя";
    echo $string[0];
    

    Вот такое никакие мультибайт-функции не обработают сейчас :(

    PS. Если я пишу “/[^[:alnum:]]/u” – у меня вообще ничего не выводится…

  4. 4. batoon Says:

    Так ведь во всю уже идет разработка PHP6, в котором заявлена полная поддержка юникода на уровне ядра. Кстати, наш российский разработчик реализует это.

  5. 5. FX Poster Says:

    И? Она вовсю уже фиг знает сколько идет. Когда этот пхп6 выйдет никто не знает. Даже примерных сроков нет.

  6. 6. Ti Says:

    чем жаловаться, посодействуйте.
    php – opensource

  7. 7. FX Poster Says:

    Если его профессиональные программисты уже хз сколько присобачивают, думаете я сильно помочь смогу?

  8. 8. Ti Says:

    Да, уверен что сможете!

Leave a Reply