| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Регулярные выражения > Чет не работает... |
| Автор: Vetlblya 8.2.2010, 10:52 |
| Передаю в код строку "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; } |
| Автор: JAPH 8.2.2010, 11:49 | ||
Странное экранирование. Экранировать нужно для регулярки квадратные скобки и слэш; для строки в двойных кавычках $, чтобы не подставлять $?. Хотя вроде без экранирования ][ тоже работает - DWIM
|
| Автор: Vetlblya 8.2.2010, 12:37 | ||||
попробовал с экранированием всерно на ложь вылетает обоих случаях. пробовал W, не помогает. |
| Автор: JAPH 8.2.2010, 12:55 |
| Как определяем, что вылетает? Кэш браузера ни при чем? Не может быть проблема в другом участке кода? Поставьте warn для отладочных выводов в лог. P.S. Зачем цитировать пост целиком.. |
| Автор: Vetlblya 8.2.2010, 13:07 | ||
не так выразился... вылетает - в условии переходит всегда в ложь, при передаче любой строки, с символами "корявыми" или без них. в другом не может. что такое warn и куда его поставить? p.s. увлекся |
| Автор: JAPH 8.2.2010, 13:14 | ||||
еще вот это не расшифровал) warn - списковый оператор, выводящий предупреждение в STDERR, что в веб-программировании обычно направляется в лог ошибок.
|
| Автор: Vetlblya 8.2.2010, 13:24 | ||
я дико извиняюсь за свою тупость и невежество!!! а где хранится этот лог??? |
| Автор: JAPH 8.2.2010, 13:27 |
| Это хороший вопрос =) А где вы тестируете скрипт? Попробуйте поискать файл error.log в: корневой папке сайта, в папке веб-сервера, просто поиском по файлам =) |
| Автор: Vetlblya 8.2.2010, 13:38 |
| две последние строчки из этого файла: [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 чего они значат? |
| Автор: JAPH 8.2.2010, 13:42 | ||||
Сравнивая с
|
| Автор: Vetlblya 8.2.2010, 13:49 |
| 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 |
| Автор: JAPH 8.2.2010, 13:50 | ||
| Нет уж, надо именно в условии, чтобы различить, warn из которой ветки выдался =) Кстати, подумалось вот о чем: не могут ли искомые символы быть url-encoded, предстать в форме %22, например?
|
| Автор: Vetlblya 8.2.2010, 13:50 | ||
| поставил 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 то что с ними делать? |
| Автор: JAPH 8.2.2010, 14:06 | ||
| А вы вводили строки, которые содержат искомые символы? Попробуйте. Если url-encoded.. то декодировать =)
Можно переложить эту заботу на CGI, который умеет самостоятельно выковыривать все пришедшие параметры, разбираться с url-encoded и т.п. вещами. |