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 Форумы портала PHP.SU :: Версия для печати :: Multibyte preg_filter
Все строковые функции и регулярные выражения достаточно сильно зависят от кодировки в которой трактуются данные из их внутреннего представления - по этой причине при работе с нми необходимо не только проверить чтобы строковая константа шаблона и сама проверяемая строка были в одной и той же кодировки - но и функция регулярных выражений также трактовала их в заданной правильной кодировке
Для решения вы можете попробовать несколько вариантов - например с помощью функций mb_convert_encoding или iconv преобразовать строку в однобайтовый вид и производить обычное сравнение - или же воспользовать функций http://www.php.su/functions/?mb-regex-encoding для указания кодировки в которой будут трактоваться шаблоны регулярных выраженй Также можете попробовать добавить модификатор /u к соответствующему шаблону
, можно preg_match(/\{en\}(.*)\{\/en\}/s, $str, $m) и поискать его в $m;
Прег-фильтр - он всё-таки как реплейс, но с маленьким отличием. (Добавление)
Можно, может быть, и так
reg_filter('/$.+\{en\}(.*)\{\/en\}.+$/s', '\\1', $data); Но думаю, цель была не та)
Прег-фильтр - он всё-таки как реплейс, но с маленьким отличием.
Судя по приведенному результату выполнения фильтрации текста в строке - функция preg_filter вообще проигнорировала текста находящийся в русской кодировке Как самый простой вариант проверки можно сохранить исходный код PHP-скрипта в однобайтовой кодировке windows-1251 - а также установить ее же для внутреннего представления данных и для строки по которой осуществляется шаблонная фильтрация
JustUserR, судя по приведенному результату, он и отработал как preg_replace
В таком случае можно воспользоваться дополнительной функией обратного вызова - которая будет обрабатывать одну или все найденные замену и сохранять ее в заданную переменную - полученный результат по сути и будет искомой фильтрацией строки по найденным вхождениям по шаблону
Имелось в виду что если в функцию обратного вызова передавать аргумент по ссылке - то можно сразу модифицировать исходную строку и оставить в ней только нужные данные согласно шаблону фильтрации
Почитал, подумал, попробовал... сделал на _match ;)
Вообще если структура анализируемого текста у вас в точности такая же как в приведенном вами сообщении - то можно сделать разбор на основе обычных строковых функций типа substr и strpos - учитывая что нужно искать только два вхожденя соответствующие искомому языку и располагаемые последовательно без идентичных вложенных тегов - то такой подход будет работать даже быстрее
учитывая что нужно искать только два вхожденя соответствующие искомому языку и располагаемые последовательно без идентичных вложенных тегов - то такой подход будет работать даже быстрее
да вот в том то и дело что кол-во тэгов языка может быть n и заранее не известно. просто не вижу другого выхода создания многоязыкового контента без создания сотен полей для каждого языка. на страницу в около 5 preg_match'ей будет.