![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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