PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (1): [1]
Найдено сообщений: 5
Гагигегабо
Отправлено: 02 Декабря, 2012 - 19:40:03 • Тема: Кириллица, мульбитайтовые символы и preg_replace • Форум: Кодировки и все смежное
Ответов: 18 Просмотров: 12596
sKaa пишет: Гагигегабо , пробел в шаблоне можно обозначить как :
Спасибо за совет, но мне нужен просто пробел.
\s - соответствует любому из "пробельных символов" (пробел, вертикальная , или горизонтальная табуляция, символ новой строки и т. д.),
Гагигегабо
Отправлено: 02 Декабря, 2012 - 19:19:15 • Тема: Кириллица, мульбитайтовые символы и preg_replace • Форум: Кодировки и все смежное
Ответов: 18 Просмотров: 12596
NoPaper пишет: Сейчас у себя запустил скрипт:
Все работает отлично!
Файл в кодировке UTF-8 + в корне лежит htaccess с прописанной кодировкой utf-8
Этот код ничего не фильтрует, я думаю имелось ввиду следующее:
PHP:
скопировать код в буфер обмена
'[^ a-zA-Z0-9\+абвгдеёжзийклмнопрстуфчхцшщъьыэюяАБВГДЕЁЖЗИЧЙКЛМНОПРСТУФХЦШЩЬЪЫЭЮЯ\-]*' ,
"" ,
"Проверка работы кодировки ¦ UTF-8 ¦"
) ;
Работает также, как и я писал выше.
Гагигегабо
Отправлено: 02 Декабря, 2012 - 17:46:30 • Тема: Кириллица, мульбитайтовые символы и preg_replace • Форум: Кодировки и все смежное
Ответов: 18 Просмотров: 12596
В общем не получается отфильтровать строку с символами вроде ¦, ¦ и кириллицей.
Где ¦ - это, например, мнемоники:
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
Не на винде
Страниц (1): [1]
Powered by ExBB FM 1.0 RC1. InvisionExBB