Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сформировать запрос? 
:(
    Опции темы
s_a_s_h_a
Дата 19.8.2004, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Люди, подскажите, пожалуйста, как вручную корректно сформировать запрос, что-то типа:

http://site.ru?name=%D2%E5%F1%F2%EE%E2%E0%FF&age=12

В общем, чтобы русские символы передавать нормально.
PM MAIL   Вверх
GoodBoy
Дата 19.8.2004, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 4
Всего: 83



используй функцию ord - она возвращает код символа


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Secandr
Дата 19.8.2004, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: нет
Всего: 39



а потом полученое число в 16 виде представить.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
s_a_s_h_a
Дата 19.8.2004, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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;
}

Идея! Сейчас попробую все местами поменять. Может получится.
PM MAIL   Вверх
GoodBoy
Дата 19.8.2004, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 4
Всего: 83



Цитата(s_a_s_h_a @ 19.8.2004, 16:32)
Это совсем неинтересно. Во первых, эта функция возвращает код только первого символа выражения, а во вторых, его еще надо преобразовывать в 16-ый код

А что тебе мешает сделать что-нить типа:
Код
my $string = 'оылра полфырваплфоыр пфлоырвпаэ';
my $result = '';
$result .= '%'.hex(ord($symb)) for my $symb (split(//, $string));



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
s_a_s_h_a
Дата 19.8.2004, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



GoodBoy, ты пробовал, то что написал?
Просто функция hex выражение воспринимает выражение как строку шестнадцатеричных цифр и возвращает десятичное значение.

Мне надо антиhex.
PM MAIL   Вверх
GoodBoy
Дата 19.8.2004, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 4
Всего: 83



да, немного не то написал... Вот так надо:

Код
my $string = 'Аоылра полфырваплфоыр пфлоырвпаэ';
my $result = '';
$result .= '%'.unpack("H2", $_) for (split(//, $string));



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
s_a_s_h_a
Дата 19.8.2004, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Спасибо, GoodBoy.
Я уже пытался запаковать это дело, но у меня естественно ничего не получалось, т.к. использовал функцию pack.

Правда, если кто-то использует функцию декодирования запроса, которую я приводил ранее, то он раскодировать запрос, полученный твоим способом не сможет. Ему надо будет внести маленькую поправочку:

$val=~s/%([0-9A-Ha-h]{2})/pack('C',hex($1))/ge;

Тогда все будет замечательно. Спасибо.

PM MAIL   Вверх
GoodBoy
Дата 19.8.2004, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 4
Всего: 83



я бы посоветовал вместо
Код
$val=~s/%([0-9A-Ha-h]{2})/pack('C',hex($1))/ge;

использовать
Код
$val=~s/%([0-9a-h]{2})/pack('C',hex($1))/gei;

(буква i в конце) и тогда тоже все будет великолепно!!!! :-)))))))))))

Добавлено @ 16:41
ой... какое-то пидарское окончание у строки получилось... :-))))))))))))))))))

Это сообщение отредактировал(а) GoodBoy - 19.8.2004, 16:42


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
ElectricalStorm
Дата 19.8.2004, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



Код

$val=~s/%([0-9a-h]{2})/pack('C',hex($1))/;


что такое h ??
mb [0-9A-Fa-f]{2} ?


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
s_a_s_h_a
Дата 20.8.2004, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



ElectricalStorm, действительно два лишних символа. Просто кто-то ранее опечатался и теперь везде (т.е. во многих книжках и на тех страницах, где я видел пример функции urldecode) пишут [0-9A-H]. Это работает, поэтому мало кто замечает, что вместо H можно F поставить.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0926 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.