Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чет не работает... Не обноруживаются символы 
:(
    Опции темы
Vetlblya
Дата 8.2.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



Передаю в код строку "dfgdfg!#dfg$%jh^y&*yy()y" в условии работает ложь. В другой раз передаю строку "jhtgdjgh76756" и срабатывает опять ложь. Как произвести проверку наличия символов "][<>\|&;`'\"*\$\?~\^(){}\n\r" в строке, чтобы срабатывала истина, когда они присутствуют???????

my $query = $ENV{QUERY_STRING};

my $metasymbols = "][<>\|&;`'\"*\$\?~\^(){}\n\r";

print "Content-Type:text/html\n\n";

if ($query =~ s/[$metasymbols\\]//g) 
     {
     print "<h2>1</h2><br>";
     print $query;
    }
else
    {
     print "<h2>2</h2><br>";
     print $query;
    }
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



Странное экранирование. Экранировать нужно для регулярки квадратные скобки и слэш; для строки в двойных кавычках $, чтобы не подставлять $?. Хотя вроде без экранирования ][ тоже работает - DWIM smile

Код

my $query = "dfgdfg!#dfg$%jh^y&*yy()y";
my $metasymbols = "\\]\\[<>\\\\|&;`'\"*\$?~^(){}\n\r";
#print "Content-Type:text/html\n\n";
if ($query =~ s/[$metasymbols]//g) {
     print "<h2>1</h2><br>";
     print $query;
} else {
     print "<h2>2</h2><br>";
     print $query;
}



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Vetlblya
Дата 8.2.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



Цитата(JAPH @ 8.2.2010,  11:49)
Странное экранирование. Экранировать нужно для регулярки квадратные скобки и слэш; для строки в двойных кавычках $, чтобы не подставлять $?. Хотя вроде без экранирования ][ тоже работает - DWIM smile

Код

my $query = "dfgdfg!#dfg$%jh^y&*yy()y";
my $metasymbols = "\\]\\[<>\\\\|&;`'\"*\$?~^(){}\n\r";
#print "Content-Type:text/html\n\n";
if ($query =~ s/[$metasymbols]//g) {
     print "<h2>1</h2><br>";
     print $query;
} else {
     print "<h2>2</h2><br>";
     print $query;
}

попробовал с экранированием всерно на ложь вылетает обоих случаях. пробовал W, не помогает. 
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



Как определяем, что вылетает? Кэш браузера ни при чем? Не может быть проблема в другом участке кода? Поставьте warn для отладочных выводов в лог.
P.S. Зачем цитировать пост целиком..


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Vetlblya
Дата 8.2.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



Цитата(JAPH @ 8.2.2010,  12:55)
Как определяем, что вылетает? Кэш браузера ни при чем? Не может быть проблема в другом участке кода? Поставьте warn для отладочных выводов в лог.
P.S. Зачем цитировать пост целиком..

не так выразился... вылетает - в условии переходит всегда в ложь, при передаче любой строки, с символами "корявыми" или без них.  в другом не может. что такое warn  и куда его поставить?
p.s. увлекся
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



Цитата(Vetlblya @ 8.2.2010,  12:37)
пробовал W, не помогает.

еще вот это не расшифровал)

warn - списковый оператор, выводящий предупреждение в STDERR, что в веб-программировании обычно направляется в лог ошибок.

Код
my $query = $ENV{'QUERY_STRING'};
warn "\$query: $query\n";
my $metasymbols = "\\]\\[<>\\\\|&;`'\"*\$?~^(){}\n\r";
print "Content-Type:text/html\n\n";
if ($query =~ s/[$metasymbols]//g) {
     warn "True";
     print "<h2>1</h2><br>";
     print $query;
} else {
     warn "False";
     print "<h2>2</h2><br>";
     print $query;
}


Это сообщение отредактировал(а) JAPH - 8.2.2010, 13:15


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Vetlblya
Дата 8.2.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



Цитата(JAPH @ 8.2.2010,  13:14)
warn - списковый оператор, выводящий предупреждение в STDERR, что в веб-программировании обычно направляется в лог ошибок.

я дико извиняюсь за свою тупость и невежество!!! а где хранится этот лог???
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



Это хороший вопрос =)
А где вы тестируете скрипт?
Попробуйте поискать файл error.log в: корневой папке сайта, в папке веб-сервера, просто поиском по файлам =)


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Vetlblya
Дата 8.2.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



две последние строчки из этого файла:
[Mon Feb 08 13:23:48 2010] [error] [client 127.0.0.1] $query: q=jhtgdjgh76756, referer: http://127.0.0.1/menu.html
[Mon Feb 08 13:23:50 2010] [error] [client 127.0.0.1] $query: q=dfgdfg!, referer: http://127.0.0.1/menu.html

чего они значат?
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



Сравнивая с 
Код
warn "\$query: $query\n";
 можно смотреть, чему равна $query. А вот почему не вывелось ни True, ни False.. Давайте к ним на всякий случай прицепим \n: 
Код
warn "True\n";
 и с False то же


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Vetlblya
Дата 8.2.2010, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



warn "True\n"; warn "False\n"; поставил сразу после условия.

вот что выдал error.log
[Mon Feb 08 13:45:34 2010] [error] [client 127.0.0.1] $query: q=jhtgdjgh76756, referer: http://127.0.0.1/menu.html
[Mon Feb 08 13:45:34 2010] [error] [client 127.0.0.1] True, referer: http://127.0.0.1/menu.html
[Mon Feb 08 13:45:34 2010] [error] [client 127.0.0.1] False, referer: http://127.0.0.1/menu.html
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



Нет уж, надо именно в условии, чтобы различить, warn из которой ветки выдался =)

Кстати, подумалось вот о чем: не могут ли искомые символы быть url-encoded, предстать в форме %22, например?
Код
my $query = $ENV{'QUERY_STRING'};
warn "\$query: $query\n";
my $metasymbols = "\\]\\[<>\\\\|&;`'\"*\$?~^(){}\n\r";
print "Content-Type:text/html\n\n";
if ($query =~ s/[$metasymbols]//g) {
     warn "True\n";
     print "<h2>1</h2><br>";
     print $query;
} else {
     warn "False\n";
     print "<h2>2</h2><br>";
     print $query;
}



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Vetlblya
Дата 8.2.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



поставил warn "True\n"; warn "False\n"; внутри веток условия. лог выглядит так:
[Mon Feb 08 13:48:44 2010] [error] [client 127.0.0.1] $query: q=dfgdfg!, referer: http://127.0.0.1/menu.html
[Mon Feb 08 13:48:44 2010] [error] [client 127.0.0.1] False, referer: http://127.0.0.1/menu.html
[Mon Feb 08 13:48:45 2010] [error] [client 127.0.0.1] $query: q=jhtgdjgh76756, referer: http://127.0.0.1/menu.html
[Mon Feb 08 13:48:45 2010] [error] [client 127.0.0.1] False, referer: http://127.0.0.1/menu.html

Добавлено через 1 минуту и 48 секунд
Цитата

не могут ли искомые символы быть url-encoded, предстать в форме %22, например?


если они url-encoded то что с ними делать? 
PM MAIL   Вверх
JAPH
Дата 8.2.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: нет
Всего: 23



А вы вводили строки, которые содержат искомые символы? Попробуйте.

Если url-encoded.. то декодировать =)
Код
s/%(..)/chr hex $1/eg;

Можно переложить эту заботу на CGI, который умеет самостоятельно выковыривать все пришедшие параметры, разбираться с url-encoded и т.п. вещами.

Это сообщение отредактировал(а) JAPH - 8.2.2010, 14:08


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0942 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.