Delphi - URL Encoded

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by lamer811, 18 Sep 2010.

  1. lamer811

    lamer811 Elder - Старейшина

    Joined:
    8 Nov 2009
    Messages:
    132
    Likes Received:
    39
    Reputations:
    12
    Всем привет.
    Возник вопрос:
    У меня есть поле Edit (можно Memo), нужно закодировать содержимое в формате URL Encoded.
    Смотрел алгоритм кодирования, но как реализовать не догнал...

    Об URL Encoded узнал вот тут: http://ru.wikipedia.org/wiki/URL

    Кто-то уже сталкивался с подобной задачей?

    P.S. Спасибо, что уделили время!
     
  2. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Это для отправки софтом или просто так?
    Если для отправки, то посмотрите свою библиотеку, там наверняка есть эта функция.
    Например в инди вообще не надо ничего делать, она сама кодирует. В синапсе эта функция лежит в synacode
     
  3. NemeZz

    NemeZz Elder - Старейшина

    Joined:
    20 Aug 2008
    Messages:
    102
    Likes Received:
    67
    Reputations:
    3
    буду краток -
    Code:
    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;
    
    Код лежит на всех сайтах, гуглится за минуту, работает отлично.
     
    2 people like this.
  4. lamer811

    lamer811 Elder - Старейшина

    Joined:
    8 Nov 2009
    Messages:
    132
    Likes Received:
    39
    Reputations:
    12
    Огромное спасибо! Плюсую!