Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

URL Encode [D7, 2003]


__ivan ©   (2007-10-11 10:54:00) 

Есть такая функция, которая занимается преобразованием символов в url-"%hex" запросы (URLEncode - он ниже). Все бы хорошо, но я беру для примера Google.com и делаю запрос браузером: "тестирование русского текста", получаю:
http://www.google.com/search?hl=en&q= %D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B3%D0%BE+%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0&btnG=Search

Используя же функция ниже, получаю
%F2%E5%F1%F2%E8%F0%EE%E2%E0%ED%E8%E5%20%F0%F3%F1%F1%EA%EE%E3%EE%20%F2%E5%EA%F1%F2%E0


Что делает браузер? Он отправляет юникодом?

function UrlEncode(S : String) : string;
var
   I : Integer;
begin
   Result := '';
   for I := 1 to Length(S) do begin
       if AnsiChar(S[I]) in ['0'..'9', 'A'..'Z', 'a'..'z'] then
           Result := Result + S[I]
       else
           Result := Result + '%' + IntToHex(Ord(S[I]), 2);
   end;
end;


Как мне исправить или переписать эту функцию или где посмотреть адаптированный вариант?


Dmitry S   (2007-10-11 16:19:00) [1]


> Насчет Юникода - не используется при работе в Сети, только
> 8 битные символы.

Да ну:)


umbra   (2007-10-11 12:02:00) [2]

она не аналогична той, что привели вы.
Кроме того, вы привели неполную строку запроса. в полной строке обычно есть параметры ie - кодирование ввода oe - кодирование вывода. И у меня там написано - utf8


Anatoly Podgoretsky   (2007-10-11 11:58:00) [3]

> __ivan  (11.10.2007 10:54:00)  [0]

Что ты подал на вход функции.
Насчет Юникода - не используется при работе в Сети, только 8 битные символы.


__ivan   (2007-10-11 11:16:00) [4]

Да вот она, но она на самом деле аналогична той, что я привел выше и результат работы соответственно тоже.

function PathEncode(ASrc: string): string;
const
 UnsafeChars = ['*', '#', '%', '<', '>', '+', ' '];  {do not localize}
var
 i: Integer;
begin
 Result := '';
 for i := 1 to Length(ASrc) do begin
   if (ASrc[i] in UnsafeChars) or (ASrc[i] >= #$80) then begin
     Result := Result + '%' + IntToHex(Ord(ASrc[i]), 2);  {do not localize}
   end else begin
     Result := Result + ASrc[i];
   end;
 end;
end;


%F2%E5%F1%F2%E8%F0%EE%E2%E0%ED%E8%E5%20%F0%F3%F1%F1%EA%EE%E3%EE%20%F2%E5%EA%F1%F2%E0


umbra   (2007-10-11 11:07:00) [5]

посмотрите в исходниках indy реализацию метода TIdURI.PathEncode


Наверх

Титульная страница Поиск, карта сайта Написать письмо