Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перестал работать диапазон по нелатинским буквам
 
 автор: Qiao   (12.06.2009 в 15:35)   письмо автору
 
 

У меня беда. Перестали работать регулярки. В частности диапазон по нелатинским буквам.

preg_replace('|[б]|', 'й', 'абвг');

возвращает "й�ййй�й�" (&#65533 - вопрос в чёрном ромбе)

Всё в utf-8. Проверял на сервере - аналогично. Раньше такой проблемы не было.

Что за напасть?

  Ответить  
 
 автор: Trianon   (12.06.2009 в 16:12)   письмо автору
 
   для: Qiao   (12.06.2009 в 15:35)
 

А что было раньше?

Для utf8 существует специальный модификатор шаблона.

  Ответить  
 
 автор: Qiao   (12.06.2009 в 16:14)   письмо автору
 
   для: Trianon   (12.06.2009 в 16:12)
 

Раньше оно работало и возвращало "айвг".

Проверьте у себя.
Элементарное регулярное выражение.

  Ответить  
 
 автор: Trianon   (12.06.2009 в 16:26)   письмо автору
 
   для: Qiao   (12.06.2009 в 16:14)
 

>Раньше оно работало и возвращало "айвг".
в utf8 ? Сомневаюсь.

>Проверьте у себя.
Да я и так верю :))

>Элементарное регулярное выражение.
single-byte. А Вам нужно multibyte.

  Ответить  
 
 автор: Qiao   (12.06.2009 в 16:36)   письмо автору
 
   для: Trianon   (12.06.2009 в 16:26)
 

Зря сомневаетеся. Я не так давно мегабайты китайского текста выделял через диапазоны, всё в чистом utf.

Всё же кроме диапазонов работает.
preg_replace('|б|', 'й', 'абвг'); - всё нормально
Если бы она однобайтной была, то русский бы вообще с регулярными не работал.

Вы у себя проверьте - работать должно.

Я в шоке, как дальше жить без регулярок?

  Ответить  
 
 автор: Trianon   (12.06.2009 в 16:55)   письмо автору
 
   для: Qiao   (12.06.2009 в 16:36)
 

Еще раз говорю. Поставьте в хвост шаблона модификатор u и не парьте мозги

preg_replace('|[б]|u', 'й', 'абвг');

  Ответить  
 
 автор: Qiao   (12.06.2009 в 17:08)   письмо автору
 
   для: Trianon   (12.06.2009 в 16:55)
 

РАБОТАЕТ!
Я уже чуть ли не вешаться собрался.

Почему? Всю жизнь без него всё делал, вобще про него не знал, а с диапазонами работал очень плотно. Это что - с системой связано?
Решил, что php поломался.

ой, боже, вот это стрессы

  Ответить  
 
 автор: Trianon   (12.06.2009 в 17:22)   письмо автору
 
   для: Qiao   (12.06.2009 в 17:08)
 

там по ссылке всё написано.

  Ответить  
 
 автор: Qiao   (12.06.2009 в 17:55)   письмо автору
 
   для: Trianon   (12.06.2009 в 17:22)
 

Прочёл всё, вроде нет

  Ответить  
 
 автор: Trianon   (12.06.2009 в 20:46)   письмо автору
 
   для: Qiao   (12.06.2009 в 17:55)
 

u (PCRE_UTF8)
Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблоны обрабатываются как UTF8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ. Валидность UTF8 в шаблоне проверяется начиная с PHP 4.3.5.

  Ответить  
 
 автор: Qiao   (13.06.2009 в 02:24)   письмо автору
 
   для: Trianon   (12.06.2009 в 20:46)
 

Это не обьясняет почему раньше всё прекрасно работало без u (систему менял, да).

Просто когда постояно с чем-то работаешь и вдруг оно перестаёт работать - очень неприятные ощущения.

Да и вообще, сколько примеров с [а-я] не встречал, везде без u

  Ответить  
 
 автор: 423423   (13.06.2009 в 03:09)
 
   для: Qiao   (13.06.2009 в 02:24)
 

Это не обьясняет почему раньше всё прекрасно работало без u (систему менял, да).
Могло казаться, что работает правильно. Или что-то работало, но при удачном стечении обстоятельств.

Да и вообще, сколько примеров с [а-я] не встречал, везде без u
Эти примеры были не для utf8

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования