![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
s_a_s_h_a |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 20.7.2004 Где: Петрозаводск Репутация: нет Всего: 1 |
Люди, подскажите, пожалуйста, как вручную корректно сформировать запрос, что-то типа:
http://site.ru?name=%D2%E5%F1%F2%EE%E2%E0%FF&age=12 В общем, чтобы русские символы передавать нормально. |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
используй функцию ord - она возвращает код символа
|
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
а потом полученое число в 16 виде представить.
|
|||
|
||||
s_a_s_h_a |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 20.7.2004 Где: Петрозаводск Репутация: нет Всего: 1 |
Это совсем неинтересно. Во первых, эта функция возвращает код только первого символа выражения, а во вторых, его еще надо преобразовывать в 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 |
|
||||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
А что тебе мешает сделать что-нить типа:
|
||||
|
|||||
s_a_s_h_a |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 20.7.2004 Где: Петрозаводск Репутация: нет Всего: 1 |
GoodBoy, ты пробовал, то что написал?
Просто функция hex выражение воспринимает выражение как строку шестнадцатеричных цифр и возвращает десятичное значение. Мне надо антиhex. |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
да, немного не то написал... Вот так надо:
|
|||
|
||||
s_a_s_h_a |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 20.7.2004 Где: Петрозаводск Репутация: нет Всего: 1 |
Спасибо, GoodBoy.
Я уже пытался запаковать это дело, но у меня естественно ничего не получалось, т.к. использовал функцию pack. Правда, если кто-то использует функцию декодирования запроса, которую я приводил ранее, то он раскодировать запрос, полученный твоим способом не сможет. Ему надо будет внести маленькую поправочку: $val=~s/%([0-9A-Ha-h]{2})/pack('C',hex($1))/ge; Тогда все будет замечательно. Спасибо. |
|||
|
||||
GoodBoy |
|
||||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
я бы посоветовал вместо
использовать
(буква i в конце) и тогда тоже все будет великолепно!!!! :-))))))))))) Добавлено @ 16:41 ой... какое-то пидарское окончание у строки получилось... :-)))))))))))))))))) Это сообщение отредактировал(а) GoodBoy - 19.8.2004, 16:42 |
||||
|
|||||
ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
что такое h ?? mb [0-9A-Fa-f]{2} ? -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
s_a_s_h_a |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 261 Регистрация: 20.7.2004 Где: Петрозаводск Репутация: нет Всего: 1 |
ElectricalStorm, действительно два лишних символа. Просто кто-то ранее опечатался и теперь везде (т.е. во многих книжках и на тех страницах, где я видел пример функции urldecode) пишут [0-9A-H]. Это работает, поэтому мало кто замечает, что вместо H можно F поставить.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |