[gelöst] HTML Entitäten zu UTF8
[gelöst] HTML Entitäten zu UTF8
Hallo allerseits,
gibt es eine einfache Möglichkeit HTML-Entitäten (Siehe hier: Name in HTML -> Zeichen) in UTF8 umzuformen (fertige Lib/Komponente)?!
Die Möglichkeit, alle in Frage kommenden Entitäten in einer selbstgebauten Funktion herauszusuchen und entsprechend zu ersetzen, wollt ich mir gern ersparen
gibt es eine einfache Möglichkeit HTML-Entitäten (Siehe hier: Name in HTML -> Zeichen) in UTF8 umzuformen (fertige Lib/Komponente)?!
Die Möglichkeit, alle in Frage kommenden Entitäten in einer selbstgebauten Funktion herauszusuchen und entsprechend zu ersetzen, wollt ich mir gern ersparen
Zuletzt geändert von Michl am Fr 16. Aug 2013, 02:00, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: HTML Entitäten zu UTF8
Schau dir mal die Unit HTMLDefs an. Mit der Funktion ResolveHTMLEntityReference() erhältst du zwar einen WideChar, aber der Rest sollte kein Problem darstellen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: HTML Entitäten zu UTF8
Bist´n Schatz! So einfach gehts, wenn man weiss, wo man suchen muss!!! Danke!
Habs jetzt mal auf die Schnelle zusammengebastelt und in den ersten Tests siehts gut aus (und falls es noch jemand mal brauchen könnt?!):Getestet unter Lazarus 1.0.10 FPC 2.6.2
Getestet unter Lazarus 1.1 FPC 2.7.1
Habs jetzt mal auf die Schnelle zusammengebastelt und in den ersten Tests siehts gut aus (und falls es noch jemand mal brauchen könnt?!):
Code: Alles auswählen
procedure HtmlToStr(var Str:TStringList);
var
x,y,z:integer;
s:string;
wc:widechar;
begin
for x:=0 to Str.Count-1 do
if pos('&',Str.Strings[x])>0 then begin
s:=Str.Strings[x];
y:=pos('&',s);
z:=posex(';',s,y);
while (y>0) do begin
if (z>y) then
if ResolveHTMLEntityReference(copy(s,y+1,z-y-1),wc) then
s:=Stringreplace(s,copy(s,y,z-y+1),UTF8Encode(WideCharLenToString(@wc,1)),[rfReplaceAll]);
inc(y);
y:=posex('&',s,y);
z:=posex(';',s,y);
end;
Str.Strings[x]:=s;
end;
end;
Code: Alles auswählen
procedure HtmlToStr(var Str:TStringList);
var
x,y,z:integer;
s:string;
wc:widechar;
begin
for x:=0 to Str.Count-1 do
if pos('&',Str.Strings[x])>0 then begin
s:=UTF8toAnsi(Str.Strings[x]);
y:=pos('&',s);
z:=posex(';',s,y);
while (y>0) do begin
if (z>y) then
if ResolveHTMLEntityReference(widestring(copy(s,y+1,z-y-1)),wc) then
s:=Stringreplace(s,copy(s,y,z-y+1),UTF8Encode(wc),[rfReplaceAll]);
inc(y);
y:=posex('&',s,y);
z:=posex(';',s,y);
end;
Str.Strings[x]:=UTF8Encode(s);
end;
end;
Zuletzt geändert von Michl am Mo 19. Aug 2013, 22:17, insgesamt 3-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: [gelöst] HTML Entitäten zu UTF8
Ich kanns ja nicht lassen
Wenn FPC einmal eine perfekte (also deutlich bessere als Embarcaderos) Implementierung von "New Strings" hat, würde man die HTML-Information inklusive Entitäten in einen String kopieren, diesem den Type "HTML basierend auf Grund-Code xyz" geben (bzw. würde man sie sowieso immer in diesem String Typ halten)und dann würde eine Zuordnung dieses Strings auf einem mit dem gewünschten festen Ziel-Typ (z.B.UTF8 oder UTF16) automatisch die entsprechende Umcodierung (normaler Text und Entities) vornehmen.
der obige Code könnte dann auf
verkürzt werden
Das ist natürlich nur ein Traum, aber - wie in der englischen Mailing-Liste bereits diskutiert - im Prinzip möglich.
-Michael
Wenn FPC einmal eine perfekte (also deutlich bessere als Embarcaderos) Implementierung von "New Strings" hat, würde man die HTML-Information inklusive Entitäten in einen String kopieren, diesem den Type "HTML basierend auf Grund-Code xyz" geben (bzw. würde man sie sowieso immer in diesem String Typ halten)und dann würde eine Zuordnung dieses Strings auf einem mit dem gewünschten festen Ziel-Typ (z.B.UTF8 oder UTF16) automatisch die entsprechende Umcodierung (normaler Text und Entities) vornehmen.
der obige Code könnte dann auf
Code: Alles auswählen
MyUTF8String := MyHTMLString;
verkürzt werden
Das ist natürlich nur ein Traum, aber - wie in der englischen Mailing-Liste bereits diskutiert - im Prinzip möglich.
-Michael
Re: [gelöst] HTML Entitäten zu UTF8
mschnell hat geschrieben:Ich kanns ja nicht lassen
Probier's doch einfach mal.
mschnell hat geschrieben:Code: Alles auswählen
MyUTF8String := MyHTMLString;
Ich möchte diesen alten Zopf "HTML-Entitäten" bitte nicht in einem FPC String mitschleppen. Das ist völliger Unsinn.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: [gelöst] HTML Entitäten zu UTF8
Was die Leute permanent irgendwo verwenden ist definitionsgemäß kein "Alter Zopf" (auch wenn mir ebenfalls der Sinn dieser merkwürdigen Codierung-Methodik völlig schleierhaft ist).
-Michael
-Michael
Re: [gelöst] HTML Entitäten zu UTF8
mschnell hat geschrieben:Was die Leute permanent irgendwo verwenden ist definitionsgemäß kein "Alter Zopf" (auch wenn mir ebenfalls der Sinn dieser merkwürdigen Codierung-Methodik völlig schleierhaft ist).
-Michael
Ist halt wirklich ein alter Zopf, doch leider in absehbarer Zeit nicht zu vermeiden: Siehe z.B. hier
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;