Forum Webscript.Ru

Программирование => Perl => Тема начата: AntiChrist от 03 Марта 2004, 02:26:28

Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: AntiChrist от 03 Марта 2004, 02:26:28
При декодировании использую стандартную функцию Parseform из литературы. В ней плюсы заменяются пробелами а по знаку равно идет разбивка на пары ключ=значение. Конечно при это если вводишь + или = в форме они глючат.
Модули CGI и HTML мне не понравились, да и вообще хоцца свою функцию юзать а не подключать модуль ради нее одной.
Подскажите кто знает плиз.
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Chs от 03 Марта 2004, 10:36:13
perldoc CGI

Hint: use CGI qw(param);
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: NeoNox от 03 Марта 2004, 11:20:49
Цитировать
AntiChrist:
стандартную функцию Parseform из литературы

плакал
Цитировать
AntiChrist:
Модули CGI и HTML мне не понравились

да что вы говорите?
а можно узнать почему?
Значит \'стандартную функцию\' из литературы нормально а модули которыми весь мир пользуется религия не позволяет?

И как любителю изобретать велосипеды, предложу тебе посмотреть как устроен модуль CGI и в частности функции escape и unescape. Это решает твою проблему с плюсиками, равно и другой нечистью.
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: AntiChrist от 04 Марта 2004, 03:55:33
Блин! Ну почему Web программисты все такие злюки :(
С программы нужно было регистрацию снять - залез на
-- == MADALF HACK TEAM == --прочитал факу, спросил - все ясно понятно обьяснили...
А здесь на все один ответ - перлдок :( А он огромный шо писец...
И везде ссылки на тысячи других разделов :(
Кстати как под вынью запустить перлдок по нужной команде (я все через хтмл читаю)

Насчет CGI - не знаю кому как но мне гораздо читабельнее
%Form чем выкрутасы с парам и стрелочками... или print "Content-type..." запоминать все варианты применения модулей мне лень, проще самому свои функции писать.....
А вообще это дело вкуса, имхо.... многие мануалы написаны без CGI.pm значит кто-то и так пользуется....
Да и не вижу я в нем удобства....
Мне бы вот только плюсики научиться передавать :)
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Chs от 04 Марта 2004, 09:23:25
Так....закругляемся.
perldoc входит в стандартную поставку перла (даже активперла под Вынь), ну а если утрачены навыки работы с командной строкой, то этому можно только посочувствовать...

Изобретение велосипедов не преследуется по закону, и если вы занялись этим процессом, то не стоит привлекать к нему остальных участников форума.
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: AntiChrist от 04 Марта 2004, 11:07:00
Ясно, мой perldoc.bat глюченый был, а exe у мя и вовсе нет щас поправил, с этим проблем нет.....

А вот sub escape{ я не нашел... есть только escapeHTML:
начинается так:
my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_);
(использовать внутренние параметры или их дефолт чтоли?)
а что такое
\'escapeHTML\' => <<\'END_OF_FUNC\',
(блин слева одно справа -другое)
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: NeoNox от 04 Марта 2004, 11:19:41
Строка 27:
use CGI::Util qw(rearrange make_attributes unescape escape expires);
это значит что нужно экспортировать unescape и escape из модуля CGI/Util.pm.
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: AntiChrist от 06 Марта 2004, 02:40:06
Но ведь после
$todecode =~ tr/+/ /;       # pluses become spaces
плюсов тоже не останется совсем?

еще такой вопрос:
как включить DBI + strict?

use DBI;
use strict;
...
$dbh = DBI->connect("DBI:mysql:database=$DB:localhost",$db_user,$db_password)
  || die "Can\'t connect: $DBI::errstr\\n";
...

в логах появляется:
Global symbol "$dbh" requires explicit package at ...
и чо делать?
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: AntiChrist от 06 Марта 2004, 02:44:16
комментишь strict
#2: use strict;
и все пашет!
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Phoinix от 06 Марта 2004, 09:43:49
AntiChrist

При чем здесь DBI + strict???
Переменные объявлять надо! У тебя же в логах все написано!

http://forums.webscript.ru/showthread.php?s=&threadid=9932&msgnum=0
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: AntiChrist от 06 Марта 2004, 20:04:14
Спасибо, я понимаю некоторое раздражение по поводу моих вопросов, но я действительно только начинающий.
К сожалению в тех манах, что я читал не акцентировалась прагма strict. До сих пор я считал, что первое использование переменной в левой части присваивания - это и есть обьявление переменной.
$dbh = DBI->connect("DBI:mysql:database=$DB:localhost",$db_user,$db_password)
       || die "Can\'t connect: $DBI::errstr\\n";
(все переменные используемые справа обьявленны перед этим)
Если это не так то как еще можно обьявить хэндлер $dbh?

Может что-то вроде $dbh = new(DBI); ?

Насчет изобретения велосипедов: нелюблю я использовать чужие библиотеки не разобравшись как они работают. Ту функцию которую я использую для обработки формы я взял из литературы, разобрал построчно, переписал посвоему (обеденив некоторые регэкспы), понимаю полностью. escape из CGI::UTIL я недопонимаю, но вроде основное что мне непонятно связано именно с модульностью - обработка формы почти такая же, и как я понимаю с теми же проблемами:
пробелы и плюсы передаются  из формы одним и тем же сиволом - "+" поэтому, как я понимаю, надо еще перед передачей значений заменить все "+" на "_PLUS;"
(хотя, я конечно не уверен, что плюс обозначающий пробел, абсолютно такой же, как плюс обозначающий собссно сам плюс :) )
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Chs от 08 Марта 2004, 17:50:51
Про изобретение велосипедов:
дописываем в теге формы enctype="multipart/form-data" и проверяем работу свой функции "из литературы".
Далее читаем rfc2616...

strict - perldoc strict
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Петр от 24 Марта 2004, 00:35:33
Цитировать

пробелы и плюсы передаются из формы одним и тем же сиволом - "+"

Плюс, на сколько я знаю, передаётся как %2B, а вот пробел через "+".
А вообще, если уж возможны конфликты символов -
используй метод POST, он все такие знаки переводит в шестнадцатиричный код  :cool:  :D
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Phoinix от 24 Марта 2004, 15:57:02
AntiChrist
Цитировать
Может что-то вроде $dbh = new(DBI); ?


DBI - Data Base Interface, то бишь только интерфейс

Цитировать
$dbh = DBI->connect("DBI:mysql:database=$DB:localhost",$db_user,$db_password)
       || die "Can\'t connect: $DBI::errstr\\n";


А здесь ты указываешь какой именно интерфейс, в данном случае MySQL

Я лично объявляю $dbh в начале скрипта как:

use vars \'$dbh\';

т.к. мне нужно подключаться только к одной базе данных и данное подключение требуется в самых разных частях скрипта, my использую только в пределах процедур...
вообще лучше почитать ман по переменным...
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: Karabas от 12 Апреля 2004, 17:39:15
Может я чего не понял...?
Но я делаю так :

      ($x1,$text)=split(/=/,$text);
  $text=~s/\\+/ /g;
  $text=~s/%([0-9a-hA-H]{2})/pack(\'C\',hex($1))/ge;

Чем это плохо ?
Или я не понял что-то тут у вас... ???
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: NeoNox от 12 Апреля 2004, 17:48:26
Karabas конечно  не понял.
Цитировать
при это если вводишь + или = в форме они глючат

и у тебя тоже они тоже "глючат".
Название: Декодирование формы: Знаки "+" и "=". КАК?
Отправлено: snorlov от 12 Апреля 2004, 23:20:41
Надо было писать

my $dbh=.....