[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулрка или сервер или я =)
phpdreamer
Для гибкости поиска по сайту используется регулярное выражение, которое уберает спецсимволы:
$string2 = preg_replace('#[-.\'"(),/\;:<>]*#u', '', $string);


на одном сервере с Debian эта регулрка жрет еще и все русские буквы

кто виноват и что делать? :huh:



Спустя 4 минуты, 56 секунд (10.05.2011 - 20:24) inpost написал(а):
Ты указал [.] , а это значит все символы вообще, в добавок ещё указал, что для восприятия русских букв использовать кодировку UTF-8.
Если тебе точка нужна, а не все символы, то точку надо экранизировать. Советую часть других символов тоже экранизировать.

Спустя 48 минут, 57 секунд (10.05.2011 - 21:13) phpdreamer написал(а):
смотри, вот я у себя на локалхосте проверяю:
<?php
$string = '_ + - текст из русского, українського and engish ... < > ( ) ;: =) //// \\\\ \' " ';
$string2 = preg_replace('#[-.\'"(),/\;:<>]*#u', '', $string);
print_r($string); // _ + - текст из русского, українського and engish ... < > ( ) ;: =) //// \\ ' "
echo "\n";
print_r($string2);// _ + текст из русского українського and engish = \\
//убрало символы -.;:'"(),/<>

Спустя 7 минут, 50 секунд (10.05.2011 - 21:21) phpdreamer написал(а):
пробую на локалхосте "экранировать":
preg_replace('#[-\.\'"(),/\\;:<>]*#u', '', $string)

работает точно также, то есть "\" не работает как экранирование, а как символ.
пробую то же самое на этом проблемном сервере:
оба варианта одинаково жрут русские буквы

Спустя 51 минута, 4 секунды (10.05.2011 - 22:12) pyha_coder написал(а):
"word" символ - это произвольная цифра, буква или символ подчеркивания, проще говоря, любой символ, который может являться частью 'слова' в Perl. Определение букв и цифр управляется символьными таблицами, с которыми PCRE был собран. И, как следствие, эти наборы могут отличаться в различных локализированных дистрибутивах. Например, в локали "fr" (Франция) некоторые символы с кодом выше 128 используются для записи ударных символов и, соответственно, соответствуют маске \w.


Может в этом проблема у тебя?


Глянь версию pcre, в подробности не вдавался но как есть был баг связан с подобной проблемой как у тебя.

Спустя 23 минуты, 51 секунда (10.05.2011 - 22:36) phpdreamer написал(а):
не похоже, так как спец. символы -.;:'"(),/<> должны же быть одинаковыми и в французской и русской локали.
Но есть предположение, что сервере нет локали с UTF-8

Спустя 6 минут, 46 секунд (10.05.2011 - 22:42) inpost написал(а):
phpdreamer
попробуй указать locale русский

Спустя 5 минут, 19 секунд (10.05.2011 - 22:48) phpdreamer написал(а):
setlocale с самого начала ru_RU.utf-8

Спустя 4 часа, 33 минуты, 45 секунд (11.05.2011 - 03:22) Invis1ble написал(а):
inpost
Цитата
Ты указал [.] , а это значит все символы вообще

В квадратных скобках точка не интерпретируется как спецсимвол, поэтому экранировать ее не нужно.

phpdreamer
А зачем вообще регулярка? str_replace() вроде как пошустрее.

Спустя 15 часов, 55 минут, 27 секунд (11.05.2011 - 19:17) phpdreamer написал(а):
да, наверно так и поступлю...
но все равно интересна причина баги

Спустя 47 минут, 4 секунды (11.05.2011 - 20:04) Invis1ble написал(а):
phpdreamer
не знаю насчет бага, но можно еще так сделать:
$string = '_ + - текст из русского, українського and engish ... < > ( ) ;: =) //// \\\\ \' " ';
echo $string . '<br />';

$string = preg_replace('#[[:punct:]]#u', '', $string);
echo $string; // текст из русского українського and engish


_____________
http://phpdreamer.ru
http://blog.phpdreamer.ru
http://php5shop.com
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.