Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

URL кодирование строки

01.01.2007
{ **** UBPFD *********** by kladovka.net.ru ****
>> URL кодирование строки
 
Функция производит так назваемое URL кодирование строк для
использования в http запросах. Т.е. все алфавитно-цифровые
символы и знак подчёикивания '_' остаются неизменными,
пробел заменяется на '+', а все остальные символы на знак
процента '%' с двумя шестнадцатеричными цифрами.
 
Зависимости: Windows
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        27 мая 2002 г.
********************************************** }
 
function UrlEncode(Str: string): string;
 
function CharToHex(Ch: Char): Integer;
 
asm
   
and eax, 0FFh
    mov ah
, al
    shr al
, 4
   
and ah, 00fh
    cmp al
, 00ah
    jl @@10
   
sub al, 00ah
    add al
, 041h
    jmp @@20
@@10
:
    add al
, 030h
@@20
:
    cmp ah
, 00ah
    jl @@30
   
sub ah, 00ah
    add ah
, 041h
    jmp @@40
@@30
:
    add ah
, 030h
@@40
:
    shl eax
, 8
    mov al
, '%'
end;
 
var
 i
, Len: Integer;
 
Ch: Char;
 N
: Integer; P: PChar;
begin
 
Result:='';
 
Len:=Length(Str);
 P
:=PChar(@N);
 
for i:=1 to Len do begin
 
Ch:=Str[i];
 
if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_'] then Result:=Result+Ch else begin
   
if Ch = ' ' then Result:=Result+'+' else begin
    N
:=CharToHex(Ch);
   
Result:=Result+P;
   
end;
 
end;
 
end;
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
 S
: string;
begin
 S
:=UrlEncode('Мастера Delphi');
 
ShellExecute(Handle, 'open',
 
PChar('http://www.yandex.ru/yandsearch?text='+S), '', '', SW_SHOWNORMAL);
end;