線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2116
推到 Plurk!
推到 Facebook!

如何在delphi 7中的某个控件解决url地址的编码和解码问题!

答題得分者是:Vicen
dragon100
一般會員


發表:20
回覆:11
積分:6
註冊:2004-06-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-12 09:50:26 IP:61.167.xxx.xxx 未訂閱
请指教!
Vicen
高階會員


發表:13
回覆:145
積分:151
註冊:2005-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-12 13:10:58 IP:221.226.xxx.xxx 未訂閱
使用UrlEncode进行编码,UrlDecode进行解码。    
function UrlEncode(const DecodedStr: String; Pluses: Boolean): String;
{Pluses parameter specifies whether spaces will be encoded as ' ' or as ' '}
var
  I: Integer;
begin
  Result := '';
  if Length(DecodedStr) > 0 then
    for I := 1 to Length(DecodedStr) do
    begin
      if not (DecodedStr[I] in ['0'..'9', 'a'..'z',
                                       'A'..'Z', ' ']) then
        Result := Result   '%'   IntToHex(Ord(DecodedStr[I]), 2)
      else if not (DecodedStr[I] = ' ') then
        Result := Result   DecodedStr[I]
      else
        begin
          if not Pluses then
            Result := Result   ' '
          else
            Result := Result   ' ';
        end;
    end;
end;    function UrlDecode(const EncodedStr: String): String;
var
  I: Integer;
begin
  Result := '';
  if Length(EncodedStr) > 0 then
  begin
    I := 1;
    while I <= Length(EncodedStr) do
    begin
      if EncodedStr[I] = '%' then
        begin
          Result := Result   Chr(HexToInt(EncodedStr[I 1]
                                         EncodedStr[I 2]));
          I := Succ(Succ(I));
        end
      else if EncodedStr[I] = ' ' then
        Result := Result   ' '
      else
        Result := Result   EncodedStr[I];          I := Succ(I);
    end;
  end;
end;    function HexToInt(HexStr: String): Int64;
var RetVar : Int64;
    i : byte;
begin
  HexStr := UpperCase(HexStr);
  if HexStr[length(HexStr)] = 'H' then
     Delete(HexStr,length(HexStr),1);
  RetVar := 0;      for i := 1 to length(HexStr) do begin
      RetVar := RetVar shl 4;
      if HexStr[i] in ['0'..'9'] then
         RetVar := RetVar   (byte(HexStr[i]) - 48)
      else
         if HexStr[i] in ['A'..'F'] then
            RetVar := RetVar   (byte(HexStr[i]) - 55)
         else begin
            Retvar := 0;
            break;
         end;
  end;      Result := RetVar;
end;
dragon100
一般會員


發表:20
回覆:11
積分:6
註冊:2004-06-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-12 16:15:58 IP:61.167.xxx.xxx 未訂閱
可是无法解决中文问题?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-20 01:07:44 IP:218.18.xxx.xxx 未訂閱
引言: 可是无法解决中文问题?
你要搞清楚中文是用什么方式编码的,然后找对应的编码/解码控件。如果是Base64,或者其它的编码,INDY都有提供。
evapig_61857
一般會員


發表:0
回覆:1
積分:0
註冊:2006-09-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-09-14 23:00:45 IP:61.233.xxx.xxx 未訂閱
httputil中的httpencode可能會有用。
===================引 用 文 章===================
可是鄋k解酗中槴?
系統時間:2024-04-29 9:14:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!