Строку в URL

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
maxter
Сообщения: 10
Зарегистрирован: 27 апр 2007, 15:31

У меня есть задача по передачи поисковой системе одного из интернет-серверов ключевых слов для поиска.
Однако русское слово надо перевести в URL формат. Например,"позиционирование" => %EF%EE%E7%E8%F6%E8%EE%ED%E8%F0%EE%E2%E0%ED%E8%E5
Однако при использовании известных мне функции URLEncode для перевода строковой переменной в URL русские слова переводятся неправильно и сервер их не понимает.
Не могли бы вы мне помочь с решением этой проблемы? Заранее благодарен,
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

Код: Выделить всё

 
function EncodeURL(const InputStr: string; const bQueryStr: Boolean): string;
var
   Idx: Integer;
begin
   Result := '';
   for Idx := 1 to Length(InputStr) do
      begin
         case InputStr[Idx] of
            'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.':
               Result := Result + InputStr[Idx];
            ' ':
               if bQueryStr then
                  Result := Result + '+'
               else
                  Result := Result + '%20';
            else
               Result := Result + '%' + SysUtils.IntToHex(Ord(InputStr[Idx]), 2);
         end;
      end;
end;
function DecodeUrl(const InputStr: string): string;
var
   Idx: Integer;
   Hex: string;
   Code: Integer;
begin
   Result := '';
   Idx := 1;
   while Idx <= Length(InputStr) do
      begin
         case InputStr[Idx] of
            '%':
               begin
                  if Idx <= Length(InputStr) - 2 then
                     begin
                        Hex := InputStr[Idx + 1] + InputStr[Idx + 2];
                        Code := SysUtils.StrToIntDef('$' + Hex, -1);
                        Inc(Idx, 2);
                     end
                  else
                     Code := -1;
                  if Code = -1 then
                     raise SysUtils.EConvertError.Create('Invalid hex digit in URL');
                  Result := Result + Chr(Code);
               end;
            '+':
               Result := Result + ' '
            else
               Result := Result + InputStr[Idx];
         end;
         Inc(Idx);
      end;
end;

- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
maxter
Сообщения: 10
Зарегистрирован: 27 апр 2007, 15:31

Спасибо за код
Ответить