…По моему никогда…
Написать пост меня вынудила офигенная вещь в пхп, связанная с regexp‘ами и юникодом.
Возьмем регексп “/[^[:alnum:]]/” (alnum - любая буква или цифра). Он значит буквально следующее: “всё, что не является буквой или цифрой“. Возьмем функцию preg_replace и попробуем из строки, содержащей русские буквы в юникоде удалить “всё, что не является буквой или цифрой“: preg_replace(”/[^[:alnum:]]/”, “”, $string).
По логике вещей - должно работать. С латинскими буквами действительно проблем не возникает. С русскими буквами, если они записаны в Win-1251 тоже… Но запустите у себя на сервере такой скрипт:
<?php
$string = "абвгдеёжзийклмонпрстуфхцчшщьыъэюя";
echo preg_replace("/[^[:alnum:]]/", "", $string);
?>
Причем файл, в котором будет это написано должен быть сохранен в UTF8.
PS. Напомню, что ДОЛЖЕН этот скрипт вывести строку без изменений.





February 4th, 2007 at 04:12
В дополнение к посту - нашел линк, показывающий количество “unicode-compatible”-функций: http://www.php.net/~scoates/unicode/render_func_data.php
February 5th, 2007 at 09:03
PHP Unicode = Уже давно…
Для preg надо поставить модификатор u. Для нормальной работы со строками есть расширение multibyte, которое, кстати, можно заставить прозрачно заменить стандартные функции.
February 5th, 2007 at 09:06
Насчет “u” не знал, спасибо.
А вот насчет мультибайт… Все-таки хочется, чтобы юникод в ядре поддерживался.
Вот такое никакие мультибайт-функции не обработают сейчас :(
PS. Если я пишу “/[^[:alnum:]]/u” - у меня вообще ничего не выводится…
April 2nd, 2007 at 14:27
Так ведь во всю уже идет разработка PHP6, в котором заявлена полная поддержка юникода на уровне ядра. Кстати, наш российский разработчик реализует это.
April 2nd, 2007 at 15:31
И? Она вовсю уже фиг знает сколько идет. Когда этот пхп6 выйдет никто не знает. Даже примерных сроков нет.
December 27th, 2007 at 10:21
чем жаловаться, посодействуйте.
php - opensource
December 27th, 2007 at 17:06
Если его профессиональные программисты уже хз сколько присобачивают, думаете я сильно помочь смогу?
December 27th, 2007 at 22:21
Да, уверен что сможете!