PHP: аналог trim() для multibyte (mb) strings @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 9 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Paul Yanchenko Муж.
новый человек
1
Сообщения: 112
Зарегистрирован: 05.02.04
Откуда: Екатеринбург
Заголовок сообщения: PHP: аналог trim() для multibyte (mb) strings
Сообщение Добавлено: 3 Сентябрь 2006, 21:22:46 
В документации в разделе про Multibyte String Functions сказано:

Цитата:
When you manipulate (trim, split, splice, etc.) strings encoded in a multibyte encoding, you need to use special functions since two or more consecutive bytes may represent a single character in such encoding schemes.


Однако, я перерыл весь список функций расширения mbstring и не нашел ни одной функции, которая была бы альтернативой функции trim() для строк в однобайтовых кодировках. Более того, у меня даже не получилось составить цепочку вложенных mb_*-функций для получения нужного результата. Подскажите пожалуйста самый оптимальный способ? Желательно без всяких циклов.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 3 Сентябрь 2006, 21:36:58 
А чем mb_ereg_replace не устраивает?
Paul Yanchenko Муж.
новый человек
1
Сообщения: 112
Зарегистрирован: 05.02.04
Откуда: Екатеринбург
Сообщение Добавлено: 3 Сентябрь 2006, 22:49:04 
Мне кажется, что подключение регулярных выражений для такой простой операции -- это как из пушки по воробьям.

Я предпочитаю perl-compatible функции, вот у меня какой вариант получился:

Код:
echo preg_replace('/\\A\s*(.*[^\s])?\s*\\z/u', '$1', $str);


Есть способ проще (быстрее)?
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 4 Сентябрь 2006, 03:59:01 
preg_replace('@^\s*|\s*$@u', '', $str);

не ручаюсь за тонкости, я ща больше по яваскрипту
Paul Yanchenko Муж.
новый человек
1
Сообщения: 112
Зарегистрирован: 05.02.04
Откуда: Екатеринбург
Сообщение Добавлено: 4 Сентябрь 2006, 21:53:04 
Большое спасибо, действительно, это выглядит проще. Взгяд на проблему с другой стороны ;)
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 4 Сентябрь 2006, 23:10:12 
Paul Yanchenko, жди РНР6, в котором будет полная нативная поддержка :)

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
gro
новый человек
17
Сообщения: 43
Зарегистрирован: 09.09.06
Сообщение Добавлено: 9 Сентябрь 2006, 21:59:33 
Пардон, что в мешиваюсь.
trim() удаляет в начале и конце строки символы пробельной группы. Все эти символы принадлежат младшей части ASCII. Т.е. в utf-8 они кодируются так же, как и в однобайтовых кодировках.
trim() здесь будет работать точно так же.
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 9 Сентябрь 2006, 22:05:53 
gro, а мы уже перешли к использованию UTF-8?

А если это UTF-16? Перечитай внимательно цитату из первого сообщения.
gro
новый человек
17
Сообщения: 43
Зарегистрирован: 09.09.06
Сообщение Добавлено: 9 Сентябрь 2006, 22:16:25 
Если utf16, то не прокатит. Так же, как и не прокатит пример 1NV1Z0R, т.к. модификатор "u" тоже подразумевает utf8.
Но для utf8 (имхо, гораздо более распространенного) все будет нормально.
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 9 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100