![]() |
In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Wie kann ich in vorhandenen HTML-Dateien automatisch Umlaute bzw. Sonderzeichen durch den dazugehörigen Code (z.B. aus ä wird ä oder aus einem Leerzeichen wird usw.) ersetzen lassen? Klar könnte ich jede Datei einzeln öffnen und über "Suchen und Ersetzen" die einzelnen Umlaute ersetzen, aber ich würde das lieber so machen das ich die Dateien markiere und per Drag & Drop in ein Programmfenster ziehe und dort automatisch nacheinander abarbeiten lasse.
Ein Ansatz wäre das über StringReplace zu lösen, was aber nicht so gut sein dürfte da dann unter Umständen auch Links oder ähnliches ersetzt werden die eigentlich nicht ersetzt werden dürfen. Ein zweiter Ansatz sind vermutlich RegEx-Ausdrücke von denen ich leider null Ahnung habe. Der dritte Ansatz wäre das über einen HTML-Parser zu machen, jedoch habe ich bisher keinen guten kostenlosen oder zumindest günstigen HTML-Parser gefunden. Vielleicht kennt ja einer von euch einen guten? Ansonsten wäre ich über Tips dankbar wie man das Problem sonst noch angehen könnte. :) |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Dateien nacheinander jeweils in eine TStringList mit LoadFromFile einlesen, zeilenweise durchlaufen zum ersetzen z.B. mit replace, dann Stringliste wieder mit SaveToFile speichern...
Bernd. |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Zitat:
|
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
auf die Schnelle: Lese Dir die Eingabedateien in einen Eingabe-String ein. Mache Dir einen Ausgabe-String für die Ausgabedateien. Gehe den String von 1 bis length(String) durch und frage mit Case Eingabe-String[i] of die einzelnen Zeichen ab. Stößt Du auf ein zu ersetzendes Zeichen so schreibe in den Ausgabe-String die Ersetzung (ä -> ä u.s.w.) andernfalls schreibe das unveränderte Zeichen in den Ausgabe-String. Hier könntest Du Stringlisten und deren Attribut Text verwenden oder das Ganze über zwei Filestreams realisieren (was sicherlich eleganter und schneller ist). |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Dann bleibt nach wie vor das Problem das ich z.B. Links auch übersetze. Bei denen wäre es schlecht wenn z.B. aus
Code:
auf einmal ein
www.müller.de
Code:
wird. Ich werde also vermutlich nicht drumherum kommen mich mit irgendeinem HTML-Parser anfreunden zu müssen.
www.mül;er.de
|
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
wenn Du meinem Vorschlag folgst und ihn ein bisserl erweiterst, könntest Du hergehen und immer, wenn Du auf ein < triffst, solange keine "Übersetzung" vornehmen, bis Du auf ein > triffst. Damit sparst Du Dir dann alles in den HTML-Tags aus. Das dürfte eigentlich kein großes Problem sein, da reicht ein boolscher Schalter. |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hilfe hast du ja nun schon bekommen. Aber ich möchte das Thema von einer anderen Seite beleuchten.
Warum möchtest du die Umlaute ersetzen? Es ist extrem unvorteilhaft das zu tun. Normalerweise sollten die HTML-Dateien in einer ISO-8859-1 vorliegen. Diese Kodierung enthält auch deutsche Umlaute. Wieso also möchtest du die Sonderzeichen in entsprechende HTML-Entities übersetzen? Außerdem kann ich nur empfehlen, HTML-Seiten und -Dateien bei einer Neuerstellung mit UTF-8 zu kodieren. Und selbst bei fertigen Projekten könnte sich eine Umstellung auf UTF-8 durchaus lohnen, da nur so XHTML-1.0-kompatible Seiten erstellt werden können. Wenn du Interesse an weiteren Ausführungen hast, dann kannst du dich gerne melden. =) LG, Xong PS: In diesem Zusammenhang könnte dich der folgende Thread interessieren: ![]() |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
@nahpets:
Danke, deine Idee ist ja genial. :) Habe das testweise mal so gelöst:
Delphi-Quellcode:
Vielleicht hat ja jemand noch Ideen wie man das Ganze optimieren kann.
var
I : Integer; INPUT_FILE : TStringList; OUTPUT_FILE : TStringList; LengthOfFile : Int64; OneCharOfFile : Byte; HtmlTag : Boolean; begin HtmlTag := False; INPUT_FILE := TStringList.Create; INPUT_FILE.LoadFromFile('D:\Test\index.html'); OUTPUT_FILE := TStringList.Create; OUTPUT_FILE.LineBreak := ''; LengthOfFile := Length(INPUT_FILE.Text); for i := 0 to LengthOfFile - 1 do begin OneCharOfFile := Ord(INPUT_FILE.Text[i + 1]); case OneCharOfFile of // < 60 : HtmlTag := True; // > 62 : HtmlTag := False; end; if not HtmlTag then begin case OneCharOfFile of // ä 228 : OUTPUT_FILE.Append('ä'); // Ä 196 : OUTPUT_FILE.Append('Ä'); // ö 246 : OUTPUT_FILE.Append('ö'); // Ö 214 : OUTPUT_FILE.Append('Ö'); // ü 252 : OUTPUT_FILE.Append('ü'); // Ü 220 : OUTPUT_FILE.Append('Ü'); else OUTPUT_FILE.Append(INPUT_FILE.Text[i + 1]); end; end else begin OUTPUT_FILE.Append(INPUT_FILE.Text[i + 1]); end; end; OUTPUT_FILE.SaveToFile('D:\Test\index_neu.html'); FreeAndNil(INPUT_FILE); FreeAndNil(OUTPUT_FILE); end; @Xong: Ich selber brauche das nicht da ich mit Webseitenerstellung nichts mache. Ein Bekannter hatte mich gefragt ob ich ihm so was programmieren könnte. Für mich ist das also eher eine Machbarkeitsstudie. Aber danke für dein Angebot. Vielleicht komme ich ja doch mal darauf zurück. |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
versuch's mal mit Filestreams, dürfte (vor allem bei größeren Dateien) schneller sein und die Änderungen sind marginal. Für das zu "bearbeitende" Zeichen nimmst Du Byte, das geht auch mit Char, dann sparst Du die "Konvertierung".
Delphi-Quellcode:
Der weitere Teil könnte dann in der Form sein:
Var
OneCharOfFile : Char; begin ... case OneCharOfFile of // < #60 : HtmlTag := True; // > #62 : HtmlTag := False; end; ... end;
Delphi-Quellcode:
case OneCharOfFile of
'ä' : OUTPUT_FILE.Append('ä'); // #228 : OUTPUT_FILE.Append('ä'); 'Ä' : OUTPUT_FILE.Append('Ä'); // #196 : OUTPUT_FILE.Append('Ä'); ... |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
So, jetzt das Ganze mal mit FileStreams:
Delphi-Quellcode:
Gibt es da jetzt noch Möglichkeiten den Code zu optimieren?
procedure AppendString(FS : TFileStream; StrReplace : String);
var I : Integer; begin for I := 0 to Length(StrReplace) - 1 do begin FS.Write(StrReplace[i + 1], 1); end; end; procedure TfrmMain.btnConvertClick(Sender: TObject); var I : Integer; OneCharOfFile : Char; INPUT_FILE : TFileStream; OUTPUT_FILE : TFileStream; HtmlTag : Boolean; begin HtmlTag := False; INPUT_FILE := TFileStream.Create('D:\Test\index.html', fmOpenRead); OUTPUT_FILE := TFileStream.Create('D:\Test\index_neu.html', fmCreate); for I := 0 to INPUT_FILE.Size - 1 do begin INPUT_FILE.Position := I; INPUT_FILE.Read(OneCharOfFile, 1); case OneCharOfFile of // < '<' : HtmlTag := True; // > '>' : HtmlTag := False; end; if not HtmlTag then begin case OneCharOfFile of // ä 'ä' : AppendString(OUTPUT_FILE, 'ä'); // Ä 'Ä' : AppendString(OUTPUT_FILE, 'Ä'); // ö 'ö' : AppendString(OUTPUT_FILE, 'ö'); // Ö 'Ö' : AppendString(OUTPUT_FILE, 'Ö'); // ü 'ü' : AppendString(OUTPUT_FILE, 'ü'); // Ü 'Ü' : AppendString(OUTPUT_FILE, 'Ü'); else AppendString(OUTPUT_FILE, OneCharOfFile); end; end else begin AppendString(OUTPUT_FILE, OneCharOfFile); end; end; FreeAndNil(INPUT_FILE); FreeAndNil(OUTPUT_FILE); end; |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Zitat:
Außerdem gibt es noch ein paar Probleme:
Nur als Anmerkung, falls jemand mal ein ähnliches Problem haben sollte. LG, Xong |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
eine kleine Anmerkung hätt' ich noch: anstelle von
Delphi-Quellcode:
sollte auch
'ä' : AppendString(OUTPUT_FILE, 'ä');
Delphi-Quellcode:
funktionieren. Spart Laufzeit für die For-Schleife :wink:
'ä' : OUTPUT_FILE.Write('ä',5);
Die Anmerkungen von Xong sind nicht ganz von der Hand zu weisen (Der IE kann im Title-Tag nicht in allen Versionen mit "übersetzten" Umlauten umgehen, so dass das Ausklammern von HTML-Tags nicht immer falsch ist.) Wenn in einem Link, also zwischen <a href=" und "> ein Umlaut vorkommt, so ist dieser selbstverständlich nicht zu ersetzen, da er ja Teil der URL ist. Also ist auch hier das Tag von der Umwandlung auszunehmen. Hier das & durch & zu ersetzen wäre dann einfach nur noch falsch. Habe selbst eine derartige Umwandlungsroutine geschrieben, um ausschließlich an den Text von HTML-Seiten zu kommen, alle Tags mussten entfernt werden und der Rest für die suchkonforme Speicherung in Datenbanken aufbereitet werden. Ganz unsinnig ist eine derartige Umwandlung also nicht. Es kommt darauf an, was man mit dem Ergebnis machen will. |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Zitat:
Beispiel aus der Wikipedia: Der Link ![]() ![]() Auf der Seite ![]() Näheres findet man auch unter ![]() Zitat:
Heutzutage noch mit invalidem HTML zu arbeiten, wäre aber gar nicht gut, da die Browser dann mit hoher Wahrscheinlichkeit im Quirksmode arbeiten und Darstellung und Layout vom Zufall geleitet werden, oder aber zumindest in unterschiedlichen Browsern komplett unterschiedlich interpretiert werden. LG, Xong |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
was passiert denn mit dieser URL ![]() ![]() ![]() oder doch andersherum? |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Zitat:
Aus ![]() ![]() Du kannst dir ja auch mal den Quellcode deines Postings anschauen. Das DP-Forum macht aus deinem ![]() ![]() und aus dem ![]() ![]() Ich hoffe, ich konnte mich jetzt etwas deutlicher ausdrücken. Ich weiß, das klingt alles etwas abgehoben und gar nicht wichtig. Tatsächlich gehört es aber zu gutem Webdesign dazu. LG, Xong |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
sorry, aber Deine Ansichten sind nicht zu 100% korrekt. Im Forum wird nur in dem Bereich zwischen ![]() ![]()
Code:
Ebenso wäre das richtig:
[url="http://www.google.de/search?hl=de&q=wikipedia&meta="]Das wird als Linktext angezeigt[/url]
Code:
oder aber auch
[url="http://www.google.de/search?hl=de&q=wikipedia&meta="]Das wird als Linktext mit &Ampersand angezeigt[/url]
Code:
[url="http://www.google.de/search?hl=de&q=wikipedia&meta="]http://www.google.de/search?hl=de&q=wikipedia&meta=[/url]
|
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
[quote=nahpets]Im Forum wird nur in dem Bereich zwischen
![]() ![]() So wird also der BB-Code
Code:
aus deinem Posting dargestellt.
[url=http://www.google.de/search?hl=de&q=wikipedia&meta=]falsch?[/url]
Zitat:
![]() Zitat:
Zitat:
![]()
Code:
Er wird Fehlermeldungen ausgeben.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Test</title> </head> <body> <h1>Testdokument</h1> <ul>[*][url="http://www.google.de/search?hl=de&q=wikipedia&meta="]Das wird als Linktext angezeigt[/url][*][url="http://www.google.de/search?hl=de&q=wikipedia&meta="]Das wird als Linktext mit &Ampersand angezeigt[/url] [*][url="http://www.google.de/search?hl=de&q=wikipedia&meta="]http://www.google.de/search?hl=de&q=wikipedia&meta=[/url][/list]</body> </html> Der folgende Quellcode mit maskierten Ampersands ist jedoch valide und die Links funktionieren ebenfalls:
Code:
Jetzt deutlicher? :stupid:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Test</title> </head> <body> <h1>Testdokument</h1> <ul>[*][url="http://www.google.de/search?hl=de&q=wikipedia&meta="]Das wird als Linktext angezeigt[/url][*][url="http://www.google.de/search?hl=de&q=wikipedia&meta="]Das wird als Linktext mit &Ampersand angezeigt[/url] [*][url="http://www.google.de/search?hl=de&q=wikipedia&meta="]http://www.google.de/search?hl=de&q=wikipedia&meta=[/url][/list]</body> </html> LG, Xong |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
ich gebe mich geschlagen: Offensichtlich hast Du in Anbetracht Deiner Interpretation der Definitionen recht, nur ich habe das Problem, auf älteren Systemen Fehler zu erhalten. Da ist wohl was von Betriebssystem und Browserversion abhängig. Sprich: Je älter, desto weniger standardkonform. |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Zitat:
Mich würde aber wirklich interessieren, auf welchem System und mit welchem Browser da Fehler entstehen. Ich habe gerade auf einem IE 3.0, 4.01 und 5.0 getestet. Die führen die Links aber alle drei korrekt aus. Zugegeben, das ist kein aussagekräftiger Test, da ich das nur unter Windows XP mit einer Multiple-IE-Installation nachvollziehen kann. Möglicherweise wird ein "Original-System" anders reagieren. Interessant wäre aber zumindest der HTML-Quellcode mit dem die Fehler auftreten. LG, Xong PS: Mir macht das übrigens viel Spaß. Ich habe unsere Auseinandersetzung sehr genossen. Ich hoffe, meine Meinung kam nicht allzu arrogant herüber. Wenn man im Webbereich tätig ist, muss man sich meist viel anhören über schlechtes Markup und Pipapo... |
Re: In HTML-Dateien Umlaute / Sonderzeichen ersetzen
Hallo,
mein alter Hobel zu Hause mit NT 4 von anno März 2000 und IE 6 irgendwas zeigt im Titel bei
Code:
es genauso an, wie es zwischen den Tags steht, da wird nicht aus & das &. Bei Url's mit & im Href-Teil laufen die Links mit & ins Nirwana oder wo der Webserver sie sonst hininterpretiert, da er halt & anstatt & erhält. Das geht da mit & nicht.
<title>was mit & an</title>
Ist aber eigentlich auch nicht wirklich von Bedeutung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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