| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Как сформировать запрос? |
| Автор: s_a_s_h_a 19.8.2004, 15:08 |
| Люди, подскажите, пожалуйста, как вручную корректно сформировать запрос, что-то типа: http://site.ru?name=%D2%E5%F1%F2%EE%E2%E0%FF&age=12 В общем, чтобы русские символы передавать нормально. |
| Автор: GoodBoy 19.8.2004, 15:15 |
| используй функцию ord - она возвращает код символа |
| Автор: Secandr 19.8.2004, 15:28 |
| а потом полученое число в 16 виде представить. |
| Автор: s_a_s_h_a 19.8.2004, 15:32 |
| Это совсем неинтересно. Во первых, эта функция возвращает код только первого символа выражения, а во вторых, его еще надо преобразовывать в 16-ый код. И у меня много русского текста будет в запросе. Я пытался следующим образом сделать: my $q = new CGI; for(my $i=0;$i<scalar(@FIELD_NAMES);$i++) { $q->param(-name =>$FIELD_NAMES[$i], -value => $VALUES[$i]); } $QUERY=$q->query_string; но переменная $QUERY принимала значение равное $ENV{QUERY_STRING}. Не понятно..... Добавлено @ 15:37 Мне бы что-нибудь обратное такой вот функции: sub urldecode{ local($val)=@_; $val=~s/\+/ /g; $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge; return $val; } Идея! Сейчас попробую все местами поменять. Может получится. |
| Автор: GoodBoy 19.8.2004, 15:43 | ||||
А что тебе мешает сделать что-нить типа:
|
| Автор: s_a_s_h_a 19.8.2004, 15:57 |
| GoodBoy, ты пробовал, то что написал? Просто функция hex выражение воспринимает выражение как строку шестнадцатеричных цифр и возвращает десятичное значение. Мне надо антиhex. |
| Автор: GoodBoy 19.8.2004, 16:12 | ||
да, немного не то написал... Вот так надо:
|
| Автор: s_a_s_h_a 19.8.2004, 16:34 |
| Спасибо, GoodBoy. Я уже пытался запаковать это дело, но у меня естественно ничего не получалось, т.к. использовал функцию pack. Правда, если кто-то использует функцию декодирования запроса, которую я приводил ранее, то он раскодировать запрос, полученный твоим способом не сможет. Ему надо будет внести маленькую поправочку: $val=~s/%([0-9A-Ha-h]{2})/pack('C',hex($1))/ge; Тогда все будет замечательно. Спасибо. |
| Автор: GoodBoy 19.8.2004, 16:40 | ||||
я бы посоветовал вместо
использовать
(буква i в конце) и тогда тоже все будет великолепно!!!! :-))))))))))) Добавлено @ 16:41 ой... какое-то пидарское окончание у строки получилось... :-)))))))))))))))))) |
| Автор: ElectricalStorm 19.8.2004, 19:15 | ||
что такое h ?? mb [0-9A-Fa-f]{2} ? |
| Автор: s_a_s_h_a 20.8.2004, 08:53 |
| ElectricalStorm, действительно два лишних символа. Просто кто-то ранее опечатался и теперь везде (т.е. во многих книжках и на тех страницах, где я видел пример функции urldecode) пишут [0-9A-H]. Это работает, поэтому мало кто замечает, что вместо H можно F поставить. |