AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Sonderzeichen umwandeln in ISO-8859-1 und Konsorten
Thema durchsuchen
Ansicht
Themen-Optionen

Sonderzeichen umwandeln in ISO-8859-1 und Konsorten

Ein Thema von Catbytes · begonnen am 7. Jul 2005 · letzter Beitrag vom 7. Jul 2005
Antwort Antwort
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#1

Sonderzeichen umwandeln in ISO-8859-1 und Konsorten

  Alt 7. Jul 2005, 10:08
Hallo,

folgender Code ist gegeben:

Delphi-Quellcode:
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;
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.

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:
repeat
...
until
deshalb eingeführt, weil es ja sein kann, daß in einer Zeile mehrere Zeichen vorkommen können.

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.

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 hier).
Catbytes
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Sonderzeichen umwandeln in ISO-8859-1 und Konsorten

  Alt 7. Jul 2005, 11:26
Hallo,

nimm das hier solange du nichts besseres findest:

Delphi-Quellcode:
function StrToHtml(s: string): string;
const
  EntityChars = '"&<>''';
  EntityStrings: array [1..5] of string
    = ('&quot;', '&amp;', '<', '>', '&apos;');
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

Re: Sonderzeichen umwandeln in ISO-8859-1 und Konsorten

  Alt 7. Jul 2005, 11:37
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:
for i:=1 to length(s) do
  case s[i] of
    '&': s[i]:='&';
    '<': s[i]:='<';
    ...
  end; // case
[edit] man sollte auch den text weiterlesen ein helau an marabu [/edit]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz