![]() |
Sonderzeichen umwandeln in ISO-8859-1 und Konsorten
Hallo,
folgender Code ist gegeben:
Delphi-Quellcode:
Das Problem: Beim Zeichen "&" (kaufmännisches Und) verweist er andauernd auf sich selbst und erzeugt eine Endlosschleife, da ja das Zeichen im Code & selbst vorkommt.
function TForm1.Sonderzeichen(S: string): string;
var P: Integer; begin repeat P := Pos('&', S); if P > 0 then begin Delete(S, P, 1); Insert('&', S, P); end; until P = 0; repeat P := Pos('<', S); if P > 0 then begin Delete(S, P, 1); Insert('<', S, P); end; until P = 0; repeat P := Pos('>', S); if P > 0 then begin Delete(S, P, 1); Insert('>', S, P); end; until P = 0; Result := S; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text := Sonderzeichen(Edit1.Text); end; Sätze wie: <Dies ist ein Satz> werden problemlos in <Dies ist ein Satz> umgewandelt. Der Satz: Mustermann GmbH & Co. KG landet (logierschweise) in der Endlosschleife. Ich habe das mit
Delphi-Quellcode:
deshalb eingeführt, weil es ja sein kann, daß in einer Zeile mehrere Zeichen vorkommen können.
repeat
... until Frage: Gibt es eine elegantere Lösung, um Sonderzeichen HTML-Konform (bzw. ISO-8859-1-Konform für bmeCAT-Kataloge) umzuwandeln. Meine Function oben ist nicht das gelbe vom Ei (ich weiß), hat aber bisher gute Dienste geleistet - bis eben die erste Firma mit "&" auftauchte. :mrgreen: Bietet vielleicht Delphi selbst sowas an? Gibt es fertige Routinen, die man sich anschauen kann? Für jede Hilfe dankbar... Hinweis: Der Editor wandelt meine Codes in lesbare Zeichen um. Eigentlich heißt es oben: & # 3 8 ; (ohne Leerzeichen) etc. (also das Gegenstück des jeweiligen Zeichens, wie ![]() |
Re: Sonderzeichen umwandeln in ISO-8859-1 und Konsorten
Hallo,
nimm das hier solange du nichts besseres findest:
Delphi-Quellcode:
Grüße vom marabu
function StrToHtml(s: string): string;
const EntityChars = '"&<>'''; EntityStrings: array [1..5] of string = ('"', '&', '<', '>', '''); var i, j: integer; begin for i := Length(s) downto 1 do begin j := Pos(s[i], EntityChars); if j > 0 then begin Delete(s, i, 1); Insert(EntityStrings[j], s, i); end else if not (s[i] in [#32..#127]) then begin Delete(s, i, 1); Insert('&#' + IntToStr(Ord(s[i])) + ';', s, i); end; end; Result := s; end; |
Re: Sonderzeichen umwandeln in ISO-8859-1 und Konsorten
schau dir mal "stringreplace" an!
natürlich gibt es eine endlosschleife, er findet immer wieder das erste '&', auch wenn du es ersetzt hast! ich verstehe denn sinn deines codes zwar nicht, warum wird ein '&' mit einem '&' ersetzt? andere möglichkeit:
Delphi-Quellcode:
[edit] :wall: man sollte auch den text weiterlesen ein helau an marabu [/edit]
for i:=1 to length(s) do
case s[i] of '&': s[i]:='&'; '<': s[i]:='<'; ... end; // case |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz