.
Урок 2. Преобразование кодировок (URLEncode, function)
Автор megabax   
27.08.2009 г.
В этой статье будет пошагово описано создание на Delphi приложение

Урок 2. Преобразование кодировок (URLEncode, function)

Если в Яндексе или в какой либо другой поисковой системе мы наберем запрос на английском языке, то он преобразует его в нечто вроде (запрос по сочетанию simple quetion)

http://yandex.ru/yandsearch?text=simple%20quetion

А теперь попробуем набрать запрос по русский (сочетание: пробный запрос):

 

http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+%D0%B7%D0%B0

%D0%BF%D1%80%D0%BE%D1%81&stpar2=%2Fh1%2Ftm121%2Fs1&stpar4=%2Fs1&stpar1=%2Fu0

 

Как видим, русские буквы превращаются во всякую "абракадабру". Очевидно, нам нужно преобразовывать нормальный текст в эту "абракадабровскую" кодировку:

function DigitToHex(Digit: Integer): Char;
begin
  case Digit of
    0..9: Result := Chr(Digit + Ord('0'));
    10..15: Result := Chr(Digit - 10 + Ord('A'));
  else
    Result := '0';
  end;
end; // DigitToHex

function URLEncode(const S: string): string;
  var
    i, idx, len: Integer;
begin
  len := 0;
  for i := 1 to Length(S) do
    if ((S[i] >= '0') and (S[i] <= '9')) or
    ((S[i] >= 'A') and (S[i] <= 'Z')) or
    ((S[i] >= 'a') and (S[i] <= 'z')) or (S[i] = ' ') or
    (S[i] = '_') or (S[i] = '*') or (S[i] = '-') or (S[i] = '.') then
      len := len + 1
    else
      len := len + 3;
  SetLength(Result, len);
  idx := 1;
  for i := 1 to Length(S) do
    if S[i] = ' ' then
    begin
      Result[idx] := '+';
      idx := idx + 1;
    end
    else if ((S[i] >= '0') and (S[i] <= '9')) or
    ((S[i] >= 'A') and (S[i] <= 'Z')) or
    ((S[i] >= 'a') and (S[i] <= 'z')) or
    (S[i] = '_') or (S[i] = '*') or (S[i] = '-') or (S[i] = '.') then
    begin
      Result[idx] := S[i];
      idx := idx + 1;
    end
    else
    begin
      Result[idx] := '%';
      Result[idx + 1] := DigitToHex(Ord(S[i]) div 16);
      Result[idx + 2] := DigitToHex(Ord(S[i]) mod 16);
      idx := idx + 3;
    end;
end; // URLEncode

Теперь протестируем функцию URLEncode. Для этого на форму добавим два текстовых поля (TEdit): edDecode и edEncode, а так же кнопку btnEncode. Напишем обработчик события OnClick этой кнопки:

procedure TfrmMain.btnEncodeClick(Sender: TObject);
begin
      edEncode.Text:=URLEncode(edDecode.Text);
end;

  Теперь испытаем программу:

Преобразование кодировок (URLEncode, function)

Посмотрим, что нам Яндекс выдаст по этому запросу*:

Преобразование кодировок (URLEncode, function)

А теперь просто наберем в Яндексе "Пробный запрос"*:

Преобразование кодировок (URLEncode, function)

 

Как видим, Яндекс нашел тоже самое.


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Microsof Internet Explorer", авторское право на который принадлежит корпорации Microsoft


Последнее обновление ( 07.11.2011 г. )