Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Multibyte preg_filter

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Не работает с utf-8
Viper
Отправлено: 26 Июля, 2010 - 16:02:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Есть текст вида

CODE (htmlphp):
скопировать код в буфер обмена
  1. {en}Hello world!{/en}
  2. {ru}Привет мир!{/ru}


NB! Перевод строки может быть и \r\n\ и \n и \r

PHP:
скопировать код в буфер обмена
  1. $name = preg_filter('/\{en\}(.*)\{\/en\}/s', '\\1', $data);

возвращает
CODE (htmlphp):
скопировать код в буфер обмена
  1. Hello world!
  2. {ru}Привет мир!{/ru}


Есть ли решение?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Мелкий Супермодератор
Отправлено: 26 Июля, 2010 - 16:10:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




а добавление модификатора m (многострочный поиск) не поможет?


-----
PostgreSQL DBA
 
 Top
Viper
Отправлено: 26 Июля, 2010 - 16:19:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Мелкий пишет:
а добавление модификатора m (многострочный поиск) не поможет?

не помогло. добавил im модификаторы, а получил просто "e"


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Champion Супермодератор
Отправлено: 26 Июля, 2010 - 17:50:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Viper пишет:
Есть ли решение?
Возможно, есть. Но только скажи, что получиться должно. Функция-то как надо, так и сработала.
 
 Top
Viper
Отправлено: 27 Июля, 2010 - 07:40:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Champion должно получится просто "Hello world!"... ну в теории Улыбка


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 30 Июля, 2010 - 15:08:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper пишет:
Есть ли решение?
Все строковые функции и регулярные выражения достаточно сильно зависят от кодировки в которой трактуются данные из их внутреннего представления - по этой причине при работе с нми необходимо не только проверить чтобы строковая константа шаблона и сама проверяемая строка были в одной и той же кодировки - но и функция регулярных выражений также трактовала их в заданной правильной кодировке
Для решения вы можете попробовать несколько вариантов - например с помощью функций mb_convert_encoding или iconv преобразовать строку в однобайтовый вид и производить обычное сравнение - или же воспользовать функций http://www.php.su/functions/?mb-regex-encoding для указания кодировки в которой будут трактоваться шаблоны регулярных выраженй Также можете попробовать добавить модификатор /u к соответствующему шаблону


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 30 Июля, 2010 - 19:15:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Чтоб из этой строки получить
Viper пишет:
Hello world
, можно preg_match(/\{en\}(.*)\{\/en\}/s, $str, $m) и поискать его в $m;

Прег-фильтр - он всё-таки как реплейс, но с маленьким отличием.
(Добавление)
Можно, может быть, и так
reg_filter('/$.+\{en\}(.*)\{\/en\}.+$/s', '\\1', $data); Но думаю, цель была не та)
 
 Top
JustUserR
Отправлено: 31 Июля, 2010 - 02:44:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Champion пишет:
Прег-фильтр - он всё-таки как реплейс, но с маленьким отличием.
Судя по приведенному результату выполнения фильтрации текста в строке - функция preg_filter вообще проигнорировала текста находящийся в русской кодировке Как самый простой вариант проверки можно сохранить исходный код PHP-скрипта в однобайтовой кодировке windows-1251 - а также установить ее же для внутреннего представления данных и для строки по которой осуществляется шаблонная фильтрация


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 31 Июля, 2010 - 08:27:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




JustUserR, судя по приведенному результату, он и отработал как preg_replace
 
 Top
JustUserR
Отправлено: 31 Июля, 2010 - 16:12:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Champion пишет:
JustUserR, судя по приведенному результату, он и отработал как preg_replace
В таком случае можно воспользоваться дополнительной функией обратного вызова - которая будет обрабатывать одну или все найденные замену и сохранять ее в заданную переменную - полученный результат по сути и будет искомой фильтрацией строки по найденным вхождениям по шаблону


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 31 Июля, 2010 - 16:24:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Чего?? preg_match можно воспользоваться и всё.
 
 Top
JustUserR
Отправлено: 31 Июля, 2010 - 18:04:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Champion пишет:
Чего?? preg_match можно воспользоваться и всё.
Имелось в виду что если в функцию обратного вызова передавать аргумент по ссылке - то можно сразу модифицировать исходную строку и оставить в ней только нужные данные согласно шаблону фильтрации


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 02 Августа, 2010 - 09:08:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Почитал, подумал, попробовал... сделал на _match ;)


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 03 Августа, 2010 - 03:16:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper пишет:
Почитал, подумал, попробовал... сделал на _match ;)
Вообще если структура анализируемого текста у вас в точности такая же как в приведенном вами сообщении - то можно сделать разбор на основе обычных строковых функций типа substr и strpos - учитывая что нужно искать только два вхожденя соответствующие искомому языку и располагаемые последовательно без идентичных вложенных тегов - то такой подход будет работать даже быстрее


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 04 Августа, 2010 - 08:05:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




JustUserR пишет:
учитывая что нужно искать только два вхожденя соответствующие искомому языку и располагаемые последовательно без идентичных вложенных тегов - то такой подход будет работать даже быстрее

да вот в том то и дело что кол-во тэгов языка может быть n и заранее не известно. просто не вижу другого выхода создания многоязыкового контента без создания сотен полей для каждого языка. на страницу в около 5 preg_match'ей будет.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB