Co masz na myśli pisząc "krzaki" to co podałeś na forum czy tylko forum tak przerobiło?
Jeżeli masz takie coś jak widać na forum to w nowszych Delphi ponieważ obsługuje Unicode wystarczy do uses HTTPApp i:
s:= HTMLDecode(HTMLDecode(s)); //tak 2 x bo najpierw trzeba & zmienić na &
Natomiast w starszych wersjach funkcja z tego modułu się nie sprawdzi właśnie przez brak Unicode zrobi inne krzaki dlatego przerobiłem wyciągniętą ze źródeł HTTPApp z Delphi 7 i ona powinna działać (chyba też w nowszych Delphi też dobrze działa):
function HTMLDecode(const AStr: AnsiString): WideString;
var
Sp, Cp, TP: PAnsiChar;
Rp: PWideChar;
S: AnsiString;
I, Code: Integer;
begin
SetLength(Result, Length(AStr));
Sp := PAnsiChar(AStr);
Rp := PWideChar(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);
Rp^ := '&';
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
Rp^ := '<'
else
Rp^ := '>';
end;
'n': if AnsiStrPos(Sp, 'nbsp;') = Sp then { do not localize }
begin
Inc(Sp, 4);
Rp^ := ' ';
end;
'q': if AnsiStrPos(Sp, 'quot;') = Sp then { do not localize }
begin
Inc(Sp,4);
Rp^ := '"';
end;
'#': begin
Tp:= Sp;
Inc(Tp);
while (Sp^ <> ';') and (Sp^ <> #0) do
Inc(Sp);
SetString(S, Tp, Sp - Tp);
Val(S, I, Code);
Rp^ := WideChar(I);
end;
else
Exit;
end;
end
else
Rp^ := WideChar(Sp^);
end;
Inc(Rp);
Inc(Sp);
end;
except
end;
SetLength(Result, Rp - PWideChar(Result));
end;
Natomiast jeżeli jest coś innego (właśnie naprawdę UTF8) tylko forum przerobiło to spróbuj wkleić w znacznikach <*code></*code> (bez *) może wtedy nie przerobi i się zobaczy co to jest. Próbowałeś kilku to wypadało by napisać co próbowałeś... Rozumiem UTF8Decode sprawdziłeś w pierwszej kolejności i nie działa.