Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.167.196] |
|
Сообщ.
#1
,
|
|
|
В строке нужно поставить процентные плюсики перед каждым словом длиной более 2 символов.
Делаю так. $text = 'Рэймонд'; $q_str = preg_replace( '#(^|\s+)(?=\w{2})#ui', ' %2B', $text ); print_r('q_str='.$q_str); В результате: q_str= %2B� %2Bэймонд Случайно обнаружил глюк. С другими словами и сочетаниями букв не замечал проблем. В чем проблема? upd. Похоже, глючит на букве Р. Как это исправить? |
Сообщ.
#2
,
|
|
|
Явно баг. Код буквы Р в UTF-8 - d0 a0. Функция, видимо, воспринимает байт a0 как отдельный неразрывный пробел и производит замену. Ошибка проявляется и с другими символами, содержащими байт a0, если такой символ стоит в начале строки и если длина слова больше 2 символов. Ошибку легко обойти:
$q_str = preg_replace( '#(?:^|\s+)(\w{2})#u', ' %2B$1', $text ); Вообще, суперфичами регвыров лучше не злоупотреблять :) |
Сообщ.
#3
,
|
|
|
Судя по гуглению, баг был известен еще в апреле 2013 года. До сих пор не исправили
|
Сообщ.
#4
,
|
|
|
Цитата S.Eugene @ Судя по гуглению, баг был известен еще в апреле 2013 года. До сих пор не исправили Я только что с багом столкнулся, имя файла обрезалось, в локалке всё норм, а на сервере баг. Колупал минут тридцать, пока выяснилось, что pathinfo косячно работает на некоторых версиях php... В общем печалька, что ни как не произойдет обновление, устраняющее баги и совместимое с предыдущими версиями пыха! |
Сообщ.
#5
,
Сообщение отклонено: Serafim -
|