PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Гагигегабо
Отправлено: 02 Декабря, 2012 - 17:46:30
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Дек. 2012
Помог: 0 раз(а)
В общем не получается отфильтровать строку с символами вроде ¦, ¦ и кириллицей.
Где ¦ - это, например, мнемоники:
http://goo[dot]gl/UBRmQ
тут они не отображаются, так как форум на cp-1251.
Паттерн:
успешно фильтрует все ненужные символы, сохраняя кириллицу, но не удаляет мультибайтовые символы, выводя их в виде значка неизвестного символа.
Паттерн:
удаляет мультибайтовые символы, а кириллицу, которую надо было бы исключить из фильтра выводит
в виде неизвестных символов.
Паттерны c \w выводят какую-то херь (:
Если смениль локаль на
Паттерн:
отфильтрует и кириллицу и мультибайтовые символы.
также выведет херь.
Собственно, это не всё.
iconv обрезает при перекодирование в 'utf-8' -> 'windows-1251' по мультибайтовому символу, что ещё трагичней, так как перевести строку в windows-1251 и провести её очистку а затем перегнать обратно в
utf-8 не получиться.
Вот извратный скрипт, который я написал для проверки (кодировка скрипта в utf-8):
PHP:
скопировать код в буфер обмена
header ( 'Content-Type: text/html; charset=utf-8' ) ; //setlocale(LC_ALL, 'ru_RU.UTF-8');
echo '<p>Cтрока поиска в UTF-8</p>' ;
echo $search = "Проверка работы кодировки ¦ UTF-8 ¦" ;
echo '<p>Cтрока поиска в windows-1251</p>' ;
echo $search_ansi = iconv ( 'utf-8' , 'windows-1251' , $search ) ; echo '<br /><br />' ;
$pattern_ansi = iconv ( 'utf-8' , 'windows-1251' , "/[^ a-zA-Z0-9\+абвгдеёжзийклмнопрстуфчхцшщъьыэюяАБВГДЕЁЖЗИЧЙКЛМНОПРСТУФХЦШЩЬЪЫЭЮЯ\-]*/i" ) ; $pattern_ansi_u = iconv ( 'utf-8' , 'windows-1251' , "/[^ a-zA-Z0-9\+абвгдеёжзийклмнопрстуфчхцшщъьыэюяАБВГДЕЁЖЗИЧЙКЛМНОПРСТУФХЦШЩЬЪЫЭЮЯ\-]*/iu" ) ; $pattern_utf8 = "/[^ a-zA-Z0-9\+абвгдеёжзийклмнопрстуфчхцшщъьыэюяАБВГДЕЁЖЗИЧЙКЛМНОПРСТУФХЦШЩЬЪЫЭЮЯ\-]*/i" ;
$pattern_utf8_u = "/[^ a-zA-Z0-9\+абвгдеёжзийклмнопрстуфчхцшщъьыэюяАБВГДЕЁЖЗИЧЙКЛМНОПРСТУФХЦШЩЬЪЫЭЮЯ\-]*/iu" ;
$pattern = "/[^ \w\-]*/i" ;
$pattern_u = "/[^ \w\-]*/iu" ;
echo '<p>На вход подается паттерн в windows-1251 и строка поиска в UTF-8</p>' ;
echo '<p>На вход подается паттерн в windows-1251 и строка поиска в UTF-8 (модификатор /u)</p>' ;
echo '<br />2) ' . preg_replace ( $pattern_ansi_u , "" , $search ) ;
echo '<p>На вход подается паттерн в windows-1251 и строка поиска в windows-1251</p>' ;
echo '<br />3) ' . preg_replace ( $pattern_ansi , "" , $search_ansi ) ; echo '<p>На вход подается паттерн в windows-1251 и строка поиска в windows-1251 (модификатор /u)</p>' ;
echo '<br />4) ' . preg_replace ( $pattern_ansi_u , "" , $search_ansi ) ;
echo '<p>На вход подается паттерн в utf8 и строка поиска в utf8 </p>' ;
echo '<p>На вход подается паттерн в utf8 и строка поиска в utf8 (модификатор /u)</p>' ;
echo '<br />6) ' . preg_replace ( $pattern_utf8_u , "" , $search ) ;
echo '<p>На вход подается паттерн в utf8 и строка поиска в windows-1251 </p>' ;
echo '<br />7) ' . preg_replace ( $pattern_utf8 , "" , $search_ansi ) ; echo '<p>На вход подается паттерн в utf8 и строка поиска в windows-1251 (модификатор /u)</p>' ;
echo '<br />8) ' . preg_replace ( $pattern_utf8_u , "" , $search_ansi ) ;
echo '<p>На вход подается паттерн и строка поиска в utf-8 </p>' ;
echo '<p>На вход подается паттерн и строка поиска в utf-8 (модификатор /u)</p>' ;
echo '<p>На вход подается паттерн и строка поиска в windows-1251 </p>' ;
echo '<p>На вход подается паттерн и строка поиска в windows-1251 (модификатор /u)</p>' ;
echo '<br />12) ' . preg_replace ( $pattern_u , "" , $search_ansi ) ;
То, что выводится сразу в utf8:
https://dl[dot]dropbox[dot]com/u/18352137/temp/utf8[dot]png
Если сменить кодировку в браузере на windows-1251:
https://dl[dot]dropbox[dot]com/u/18352137/temp/ansi[dot]png
PHP Version 5.3.13
Multibyte regex (oniguruma) version 4.7.1
Не на виндеПрикреплено изображение (Нажмите для увеличения) (Отредактировано автором: 02 Декабря, 2012 - 18:08:33)
Гагигегабо
Отправлено: 02 Декабря, 2012 - 19:19:15
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Дек. 2012
Помог: 0 раз(а)
NoPaper пишет: Сейчас у себя запустил скрипт:
Все работает отлично!
Файл в кодировке UTF-8 + в корне лежит htaccess с прописанной кодировкой utf-8
Этот код ничего не фильтрует, я думаю имелось ввиду следующее:
PHP:
скопировать код в буфер обмена
'[^ a-zA-Z0-9\+абвгдеёжзийклмнопрстуфчхцшщъьыэюяАБВГДЕЁЖЗИЧЙКЛМНОПРСТУФХЦШЩЬЪЫЭЮЯ\-]*' ,
"" ,
"Проверка работы кодировки ¦ UTF-8 ¦"
) ;
Работает также, как и я писал выше.(Отредактировано автором: 02 Декабря, 2012 - 19:22:25)
Bkm
Отправлено: 02 Апреля, 2013 - 08:07:44
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013
Помог: 0 раз(а)
вопрос где?
в посте выше написано
код где?
почему в чужой теме?
смысл новую тему открывать?
Bkm
Отправлено: 02 Апреля, 2013 - 08:13:50
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013
Помог: 0 раз(а)
страница точно в utf8, файл тоже, проблем не замечал пока случайно большую букву Р в строку не вписал.
дополнение
файл в utf8 без BOM
(Отредактировано автором: 02 Апреля, 2013 - 08:15:29)
Поиск в теме | Версия для печати
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB