被javaScript的escape函数编码过的汉字,在Delphi中该如何还原?(65分)

  • 主题发起人 主题发起人 Boblee
  • 开始时间 开始时间
B

Boblee

Unregistered / Unconfirmed
GUEST, unregistred user!
全分送上。
 
function Unescape(const StrEscaped:String):WideString;
function UnescapeUncodeChar(const s:String):WideChar;
var
r:Array [0..1] of Byte;
begin
HexToBin(
PChar(LowerCase(s)),
@r,
SizeOf(r)
);
Result:=WideChar((r[0] shl 8) or r[1]);
end;
function UnescapeAnsiChar(const s:String):Char;
begin
HexToBin(
PChar(LowerCase(s)),
@Result,
SizeOf(Result)
);
end;
var
i:Integer;

c:Integer;
begin
c:=1;
SetLength(Result,Length(StrEscaped));

i:=1;
while i<=Length(StrEscaped) do
begin
if StrEscaped='%' then
begin
if (i<Length(StrEscaped)) and (StrEscaped[i+1]='u') then
begin
Result[c]:=UnescapeUncodeChar(
Copy(
StrEscaped,i+2,4
)
);//Do with '%uxxxx'
Inc(i,6);
end
else
begin
Result[c]:=WideChar(
UnescapeAnsiChar(
Copy(StrEscaped,i+1,2)
)
);//Do with '%xx'
Inc(i,3);
end;
end
else
begin
Result[c]:=WideChar(StrEscaped);

Inc(i);
end;

Inc(c);
end;

SetLength(Result,c-1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Caption:=Unescape('aA%65%u4E2D%u6587%64Bb');
end;

建议不要使用escape(str),而采用encodeURI(str),如是,
使用HTTPApp单元中HTTPDecode就可以直接进行解码了。

 
kyq,偶对你的仰慕之情有如涛涛江水,联绵不绝,一发不可收拾。。。 [:D]
我的全部家当肯定是给你了,不过是这样的,我在我的应用程序中要自动形成一段HTML并
要求对它进行加密,由于是HTML,所以只能用escape加密,IE才能简单的用。我想从unescape
推出escape的加密原理,好让我用delphi实现escape加密。但由于我是delphi新手,
所以还是无法从你的代码中推出delphi的escape。你能讲一下你的代码吗?主要是几个关键的
地方如 WideChar((r[0] shl 8) or r[1]);或给我escape实现方法是最好了。
 
啊,早知就不用写那么多代码了,编码可比解码简单的多。
escape(str)的Delphi实现如下:

function Escape(const StrToEscape:WideString):String;
var
i:Integer;

w:Word;
begin
Result:='';

for i:=1 to Length(StrToEscape) do
begin
w:=Word(StrToEscape);

if w in [Ord('0')..Ord('9'),Ord('A')..Ord('Z'),Ord('a')..Ord('z')] then
Result:=Result+Char(w)
else if w<=255 then
Result:=Result+'%'+IntToHex(w,2)
else
Result:=Result+'%u'+IntToHex(w,4);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Caption:=Escape('aA 中文0 Bb');
end;


建议:这种编码加密强度偏低,但如果够用也就没所谓了。
 
双手奉上我的所有家当: :)
最后再次感感。。。。激。。。。了。
 
后退
顶部