Delphi中对URL进行编码和解码


本文整理自网络,侵删。

 Delphi中处理URL时,有时会遇到编码问题,比如文件名如果含有空格,则空格会被%20代替。如果不进行转换,则会出现问题。在网上找到一段转换代码(Delphi没有自带的?),可以顺利进行

 

//delphi 最快速编码 URLDecode URLEncode

function URLDecode(const S: string): string;
var
  Idx: Integer;   // loops thru chars in string
  Hex: string;    // string of hex characters
  Code: Integer; // hex character code (-1 on error)
begin
  // Intialise result and string index
  Result := '';
  Idx := 1;
  // Loop thru string decoding each character
  while Idx <= Length(S) do
  begin
    case S[Idx] of
      '%':
      begin
        // % should be followed by two hex digits - exception otherwise
        if Idx <= Length(S) - 2 then
        begin
          // there are sufficient digits - try to decode hex digits
          Hex := S[Idx+1] + S[Idx+2];
          Code := SysUtils.StrToIntDef('$' + Hex, -1);
          Inc(Idx, 2);
        end
        else
          // insufficient digits - error
          Code := -1;
        // check for error and raise exception if found
        if Code = -1 then
          raise SysUtils.EConvertError.Create(
            'Invalid hex digit in URL'
          );
        // decoded OK - add character to result
        Result := Result + Chr(Code);
      end;
      '+':
        // + is decoded as a space
        Result := Result + ' '
      else
        // All other characters pass thru unchanged
        Result := Result + S[Idx];
    end;
    Inc(Idx);
  end;
end;


function URLEncode(const S: string; const InQueryString: Boolean): string;
var
  Idx: Integer; // loops thru characters in string
begin
  Result := '';
  for Idx := 1 to Length(S) do
  begin
    case S[Idx] of
      'A'..'Z''a'..'z''0'..'9''-''_''.':
        Result := Result + S[Idx];
      ' ':
        if InQueryString then
          Result := Result + '+'
        else
          Result := Result + '%20';
      else
        Result := Result + '%' + SysUtils.IntToHex(Ord(S[Idx]), 2);
    end;
  end;
end;


相关阅读 >>

Delphi流类 遍历读取流中的所有数据

Delphi 用空格把 s 凑够 n 的长度

Delphi显示jpg、png、gif图片

Delphi xe6 通过javascript api调用百度地图

decodedate:从一个tdatetime变量中提取年、月、日数值

Delphi 删除动态数组的指定元素

一些不常用的且功能相当有用的Delphi函数

Delphi xe 安卓开发黑屏的另一种解决办法

Delphi 新建一个txt文档函数

Delphi 系统托盘 trayicon

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...