Delphi 的HtmlDecode函数扩展

当我们要处理经过HtmlEncode编码过的字符,可以使用HtmlDeCode来解码,但是Delphi自带的对于UNICODE不支持,就像球 中文是"球",这样就没办法转了,现在改写了HttpApp单位的HtmlDeCode函数。

实际办法其实就是知道UNICODE的编码方式,然后delphi的类型WideString来转换,还是看程序吧



function HTMLDecodeEx(const AStr: String): Widestring;  //处理格式转换
var
  Sp, Cp, Tp: PChar;
  Rp:PWideString;
  S: String;
  I, Code: Integer;
begin
  SetLength(Result, Length(AStr));
  Sp := PChar(AStr);
  Rp := PWideString(Result);
  Cp := Sp;
  try
    while Sp^ <> #0 do
    begin
      case Sp^ of
        '&': begin
               Cp := Sp;
               Inc(Sp);
               case Sp^ of
                 'a': if AnsiStrPos(Sp, 'amp;') = Sp then  { do not localize }
                      begin
                        Inc(Sp,3);
                        PInteger(Rp)^ := Integer('&');
                      end;
                 'l',
                 'g': if (AnsiStrPos(Sp, 'lt;') = Sp) or (AnsiStrPos(Sp, 'gt;') = Sp) then { do not localize }
                      begin
                        Cp := Sp;
                        Inc(Sp, 2);
                        while (Sp^ <> ';') and (Sp^ <> #0) do
                          Inc(Sp);
                        if Cp^ = 'l' then
                          PInteger(Rp)^ := Integer('<')
                        else
                          PInteger(Rp)^ := Integer('>');
                      end;
                 'q': if AnsiStrPos(Sp, 'quot;') = Sp then  { do not localize }
                      begin
                        Inc(Sp,4);
                        PInteger(Rp)^ := Integer('"');
                      end;
                 '#': begin
                        Tp := Sp;
                        Inc(Tp);
                        while (Sp^ <> ';') and (Sp^ <> #0) do
                          Inc(Sp);
                        SetString(S, Tp, Sp - Tp);
                        Val(S, I, Code);
                        PInteger(Rp)^ := I;
                      end;
                 else
                   begin
                     result:='';
                     exit;
                   end;
               end;
           end
      else ;
        PInteger(Rp)^ := Integer(Sp^);
      end;
      Inc(PByte(Rp),2);
      Inc(Sp);
    end;
    SetLength(Result, PChar(Rp)-PChar(Result));
  except
    result:='';
  end;
end;

你可能感兴趣的:(Delphi)