Forum Webscript.Ru
Программирование => Perl => Тема начата: Unregistered от 31 Августа 2002, 06:11:37
-
Вопрос такой:
Мы передаем скрипту запрос, скрипт его получает и декодирует:
$var = $query->param(\'var\');
После некотых изменений переменной нам надо сделать ссылку:
print "/cgi-bin/script.cgi?var=$var";
для этого надо ее надо обратно закодировать. Это можно сделать с помощью модуля CGI? Если да, то как?
-
С помощю CGI - не знаю, но руцями мона тоже. Я не понимаю людей, которые используют такие здоровые на подъем модули, как CGI. Может кто-то обяснит, зачем загружать такое чудо, если надо всего несколько функций, и то, легко исполняемые вручную?
-
Я не понимаю людей, которые используют такие здоровые на подъем модули, как CGI. Может кто-то обяснит, зачем загружать такое чудо, если надо всего несколько функций, и то, легко исполняемые вручную?
Если нужны несколько функций, то нужно и подружать лишь нужные функции.
use CGI qw(param); - например.
А по поводу "зачем" уже неожнократно говорил. что мхобретение велосипеда не преследуется по закону.
Плюс обычно те, кто не использует модуль CGI идут по следующему пути: разбор параметров формы, метод GET, потом обычно дописывается метод POST, потом разбор multypart/form-data, ну и т.д.
На каждом этапе в код естественно закрадываются ошибки, которые устраняются, но они могут всплыть на более поздних этапах, что существенно увеличивает время их поиска.
Для тренировки и отработки навыков программирования этот путь безусловно полезен, но....:)))
-
А я вот привык все делать вручную(и даже без ошибок!), потому от хорошего искать лучшего не изволю. Но коль ты говоришь, то я на досуге попробую. Не зря ведь г.: "век живи - вет учись!"
-
И все-таки это можно сделать с помощью CGI? Если нет, то как это можно сделать в ручную?
-
ее надо обратно закодировать
зачем? Не перживай, и без тебя закодируют:-). Ты всё правильно записал.
ЗЫ Или я чего не так понял?
-
to glebushka: Ты скорее всего не так понял... Мне надо на странице вывести ссылку:
что-нибудь
При нажатии на эту ссылку в адресной строке появится значение $var, т.е. если переменная содержит русские буквы, то они и отобразятся, а надо чтоб вместо них были 16-ричные коды. Или ты имеешь ввиду, что независимо от того, что отображается в адресной строке, при передаче запроса он все равно будет декодироваться?
-
ВВЕДИТЕ СВОЕ ИМЯ , я может чуть позже напишу сюда свою прогу, так что жди.
-
sub urlencode {
my ($val) = @_;
$val=~s/ /\\+/g;
$val=~s/[\\x80-\\xFF]/"%".(uc(unpack(\'H2h2\', "$&")))/ge;
return $val;
}
-
APL, ну ты зверь...
-
Я как то делал такую штуку, ну там брал слово (чиста кириллицей) , дклал урл?$var=компьютеры , потом брал все это с помощью param из CGI модуля. Специально ничего не кодировал. А в скрипте сравнивал $var и "компьютеры". Все было ништяк все работало. Мне честно говоря и в голову не приходило, что надо кодировать что то :).
-
при передаче запроса он все равно будет декодироваться?
да.
При ичпользовании ЦГИ.пм прога APL не нужна.
Мне честно говоря и в голову не приходило, что надо кодировать что то
И мне тоже:-).
Хоть я и стараюсь передавать англицкими буквами, но иногда использую русские, пока всё работало, так что не грузись:-).
-
to APL: сэнкс... вроде нормально работает.
to glebushka: причем тут CGI.pm если мне надо просто ссылку на странице вывести. А представь если в этой переменной иногда будут пробелы встречаться на сколько корректно будет работать? Тоже самое, что данную строку набрать в адресной строке в браузере...
-
sub urlencode {
my ($val) = @_;
$val=~s/([^a-zA-Z0-9.*_ @-])/sprintf "%%%lx", ord($1)/eg;
$val=~s/ /\\+/g;
return $val;
}