[Delphi] Zeichenkettenrückumwandlung der Htmlentities

Folgende Funktion erledigt das.

function tform1.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[i]='%' then
begin
if (i<Length(StrEscaped)) and (StrEscaped[i+1]='u') then
begin
Result[c]:=UnescapeUncodeChar(Copy(StrEscaped,i+2,4));
Inc(i,6);
end
else
begin
Result[c]:=WideChar(UnescapeAnsiChar(Copy(StrEscaped,i+1,2)));
Inc(i,3);
end;
end
else
begin
Result[c]:=WideChar(StrEscaped[i]);
Inc(i);
end;
Inc(c);
end;
SetLength(Result,c-1);
end;

Der Aufruf erfolgt via
unescape(zeichenkette_htmlentities);

Weitere Quellen zu „Html-Endtities“.
http://unicode.e-workers.de/entities.php
https://mothereff.in/html-entities (Encoder, Decoder für den Quercheck)