Регулярные выражения: проблема с кодировкой?

Ashotovich

Новичок
Регулярные выражения: проблема с кодировкой?

Всем привет.
Есть у меня скрипт, который вызывается include в каждой странице, чтобы проверять наличие в массиве $_POST недопустимых символов:
PHP:
if (preg_match("/[^(\w)|(\@)|(\+)|(\-)|(\.)|(\,)|(\&)|(\№)|(\/)|(\")|(\ )|(\:)]/", join($_POST)))
{
   ******//Выдаю алерт с сообщением о наличии недопустимых символов и отправляю на предыдущую страницу
   exit;
}
На локальном компе он работает нормально. А вот на сервере в инете - нет: ругается почему-то на русскую букву "ч", то есть считает, что она не входит в описанный в регулярном выражении диапазон. В чем может быть дело - в кодировке на сервере? Или мне, быть может, послать этот замороченный Perl-овский синтаксис и использовать ereg?
 

Demiurg

Guest
потому что надо настроить локаль [m]setlocale[/m]

ps
а что это у тебя за класс такой странный в твоем выражении ?
 

Quidle

Полноценный новичок
а ещё буква ё не входит...
но я тоже не знаю, в чём тут проблема :)
 

Ashotovich

Новичок
Originally posted by Demiurg
а что это у тебя за класс такой странный в твоем выражении ?
Какой еще класс? Я в регулярных выражениях, признаюсь, не силён. Слямзил выражение у кого-то, да и подправил под свои нужды. Знаю, что \w означает - все буквы. Да, кстати, <img src="images/smilies/smile.gif" border="0" alt=""> в конце - это местный интерпретатор так воспринял двоеточие и последующую скобку. ;)
 

Demiurg

Guest
мда .. выражение у тебя делает явноне то, что ты ожидаешь от него.
 

Ashotovich

Новичок
Да, выражение setlocale для русского языка так выглядит:
PHP:
setlocale(LC_ALL, "ru");
или
PHP:
setlocale(LC_ALL, "ru_RU.CP1251");
?
 

Ashotovich

Новичок
Originally posted by Demiurg
мда .. выражение у тебя делает явноне то, что ты ожидаешь от него.
Да нет, вроде все то. Оно проверяет, есть ли в $_POST символы, не соответствующие критерию "все буквы русского и латинского алфавитов, пробел, точка, запятая, знаки "@", "+", "-", "&", пробел, "/", а также двойные кавычки и двоеточие". Вот и все. Чего там неправильного?
 

Ashotovich

Новичок
Уважаемые, пожалуйста, просветите. Весь Яндкс облазил, а точного ответа для PHP насчет обозначения CP1251 для функции setlocale не нашел...
 

Demiurg

Guest
а ты попробуй поставить туда одну единственную скобку
 

Ashotovich

Новичок
Ой... И впрямь... Мде... И почему именно скобки пропускает? Где-то я намудрил... В умных книжках только общие слова говорят - \w, \W, \d и пр., а как еще отдельные символы учитывать - нет. Может, подскажете ресурс, где говорится, как, например, обозначить в регулярном выражении символ кавычек или скобки?

Заранее спасибо.
 

Demiurg

Guest
Если хочешь в них разбираться, купи себе вот это:
http://www.books.ru/shop/books/82357
 

Ashotovich

Новичок
Да где же? Ну непонятливый я, да. Носом ткни, плииз. Цитату из выражения.
 

Ashotovich

Новичок
Ну и у меня:
\w - все буквы
\@ - собака
\+ - плюс
................
\: - двоеточие

Где скобка?
 

Profic

just Profic (PHP5 BetaTeam)
...[^(\w)|(\@)|(\+)|...
это по твоему что? не скобки? %) Такая же лажа у тебя будет и с | вместе с /
 

Ashotovich

Новичок
Oops... Так что же, без разделителей все писать в классе?
Типа: ...[^\w\@\+... ?
 
Сверху