Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

URL Encode   Найти похожие ветки 

 
__ivan   (2007-10-11 10:54) [0]

Есть такая функция, которая занимается преобразованием символов в 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;


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


 
umbra ©   (2007-10-11 11:07) [1]

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


 
__ivan   (2007-10-11 11:16) [2]

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

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


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

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

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


 
umbra ©   (2007-10-11 12:02) [4]

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


 
Dmitry S ©   (2007-10-11 16:19) [5]


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

Да ну:)



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
2-1192034694
asm_viator
2007-10-10 20:44
2007.11.04
TPageControl, TPanel...


1-1187684815
ehhhh
2007-08-21 12:26
2007.11.04
наложение изображения


15-1191393645
de.
2007-10-03 10:40
2007.11.04
ProgressBar


2-1192289232
PiOnEr
2007-10-13 19:27
2007.11.04
Изменить Caption...


15-1191308496
tesseract
2007-10-02 11:01
2007.11.04
Кто там про юзабилити спрашивал ?