Zend_Filter_StringTrim некорректно работает с UTF-8?
Обнаружилось, что фильтр для тримминга строк хотя и объявляет «Unicode aware trim method», но не такой уж он «aware trim». Если в него попадает строка, оканчивающаяся на кириллическую прописную «Р», она портится. Вероятно, оттого, что её представление в UTF-8 оканчивается на A0.
Конкретно проблема вылезает вот в этой регулярке:
preg_replace('/^[\s]*|[\s]*$/sSD', '', $value)
Если добавить модификатор u, результат — вообще NULL.
PHP 5.2.10, 5.3.3 — добавление флага u решает проблему. Относительно его отсутствия — имеет смысл написать баг-репорт.
Кстати, обычная родная PHP-функция trim() при использовании без второго аргумента (либо при отсутствии не-ASCII-символов в нём) вполне безопасна для UTF-8-строк.
Проблема с флагом наблюдается в версии 5.1. Но я не уверен, что он вообще должен использоваться. Если регулярке с ним попадает неюникодовский текст, в однобайтовой кодировке, preg_replace возвращает NULL. А зендовский метод, как я понимаю, предполагался рассчитанным на любые кодировки. А почему он тогда не использует trim — непонятно.
Если добавить модификатор u, результат — вообще NULL.
только что проверил. с этим модификатором регулярка работает отлично. без него и правда наблюдается косяк с заглавной Р, а вот с ним все ок
версия php — 5.3.1
Да, с этой версией сейчас дома проверил — всё ОК. Но на работе вылезал NULL. Причём не при всех регулярках, а только при некоторых. Какая точно версия PHP там, к сожалению, не помню. Кажется, 5.1.что-то. Посмотрю ещё в понедельник.