На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > preg_replace глючит на букве Р
      В строке нужно поставить процентные плюсики перед каждым словом длиной более 2 символов.

      Делаю так.
      ExpandedWrap disabled
        $text = 'Рэймонд';
        $q_str = preg_replace( '#(^|\s+)(?=\w{2})#ui', ' %2B', $text );
        print_r('q_str='.$q_str);

      В результате: q_str= %2B� %2Bэймонд

      Случайно обнаружил глюк. С другими словами и сочетаниями букв не замечал проблем. В чем проблема?

      upd.
      Похоже, глючит на букве Р.

      Как это исправить?
      Сообщение отредактировано: S.Eugene -
        Явно баг. Код буквы Р в UTF-8 - d0 a0. Функция, видимо, воспринимает байт a0 как отдельный неразрывный пробел и производит замену. Ошибка проявляется и с другими символами, содержащими байт a0, если такой символ стоит в начале строки и если длина слова больше 2 символов. Ошибку легко обойти:
        ExpandedWrap disabled
          $q_str = preg_replace( '#(?:^|\s+)(\w{2})#u', ' %2B$1', $text );

        Вообще, суперфичами регвыров лучше не злоупотреблять :)
          Судя по гуглению, баг был известен еще в апреле 2013 года. До сих пор не исправили :(
            Цитата S.Eugene @
            Судя по гуглению, баг был известен еще в апреле 2013 года. До сих пор не исправили

            Я только что с багом столкнулся, имя файла обрезалось, в локалке всё норм, а на сервере баг. Колупал минут тридцать, пока выяснилось, что pathinfo косячно работает на некоторых версиях php... В общем печалька, что ни как не произойдет обновление, устраняющее баги и совместимое с предыдущими версиями пыха! <_<
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0203 ]   [ 14 queries used ]   [ Generated: 15.05.24, 22:37 GMT ]