[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)

[Delphi] Zeichenkettenumwandlung (Umlaute, Sonderzeichen) in Htmlentities

Folgende Funktion erledigt das.

function tform1.Escape(const StrToEscape:WideString):String;
var
i:Integer;
w:Word;
begin
Result:='';
for i:=1 to Length(StrToEscape) do
begin
w:=Word(StrToEscape[i]);
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;

Der Aufruf erfolgt via
escape(zeichenkette_mit_umlaute_oder_sonderzeichen);