Wie behebe ich ungültige HTML-Zeichen in Seiten, die mit unterschiedlicher Codierung versehen sind?

8

Ich habe eine Reihe von Websites, die ungültige Zeichen darstellen. Die Meta-Tags der Seiten geben die UTF-8-Codierung an. Einige Seiten enthalten jedoch Zeichen, die von UTF-8 nicht interpretiert werden können, wahrscheinlich weil die Dateien mit einer anderen Codierung (z. B. ANSI) gespeichert wurden. Das Besondere, um das ich mich gerade Sorgen mache, ist ein schlauer Apostroph (wie in " Bobs " ... tut mir leid, wenn das nicht richtig angezeigt wird). Der Validierer von W3 gibt an, dass die Entität " \ x92 " ist, überprüft die Datei jedoch nicht, da sie nicht Unicode zugeordnet ist. Und natürlich, wenn ich die Datei in Notepad ++ öffne und die Codierung in UTF-8 ändere, wird das Zeichen durch eine 92 in einer schwarzen Box ersetzt.

Hier ist meine Frage: Was ist der einfachste Weg, das zu beheben? Muss ich alle Seiten öffnen und dieses Zeichen durch ein konventionelles Apostroph ersetzen? Oder gibt es eine schnelle Lösung, die ich hinzufügen könnte (sagen wir zu IIS), die das Codierungsproblem möglicherweise überschreibt oder behebt? Oder muss ich Brute-Force finden / ersetzen? Ich habe Hunderte von Seiten auf diesen Webseiten und ich habe keine Ahnung, wie viele von ihnen ich ändern müsste. Wenn jemand einen Weg kennt, dieses Problem entweder zu umgehen oder schnell zu beheben, würde ich das schätzen.

    
Andy 30.09.2010, 17:42
quelle

4 Antworten

2

Liefern Sie die Seiten als direktes HTML oder haben Sie ein anderes Skript, das den Inhalt bereitstellt? Wenn Sie ein Skript haben, das den Inhalt bereitstellt, könnte dieses Skript einfach nach einer beliebigen Instanz von \ x92 suchen und sie durch ein Apostroph ersetzen. In PHP wäre dies ein einfaches str_replace ()

Wenn Sie direktes HTML bereitstellen, müssen Sie die Dateien selbst ändern. Dies kann jedoch automatisiert werden (und wahrscheinlich sollte es sein, wenn Sie Hunderte von Dateien haben), abhängig davon, welche Werkzeuge Sie zur Verfügung haben und welches Betriebssystem Sie sind. Da Sie sagten, Sie verwenden Notepad ++ Ich nehme an, es ist sicher anzunehmen Sie sind in MS Windows (daher keine Spaß Unix-Befehle, um die Dinge zu beschleunigen)

Es kann jedoch möglich sein, ein BATCH-Skript zu erstellen, das dies jedoch tun kann. Es gibt sehr einfache ASCII-Textbearbeitungswerkzeuge, die in die Eingabeaufforderung integriert sind. Wenn das nicht möglich ist, ist es sehr gut möglich, ein C- oder C ++ - Programm zu erstellen, wenn Sie einen Compiler auf Ihrem System haben und Kenntnisse über C haben. Wenn Sie den ersten und nicht den letzten haben, fragen Sie, und ich werde einige aufzählen Quelle für dich.

    
stevendesu 30.09.2010, 17:51
quelle
1

Ich bin mir nicht sicher, ob es sich um die Kodierung handelt, aber wenn Sie es mit roher Gewalt tun müssen, könnten Sie immer ein kurzes Programm schreiben, das alle Ihre Webseiten durchläuft und jede Datei in den Speicher lädt , führt einen regex.replace aus, um das Problemzeichen zu beheben, und speichert die Datei auf dem Datenträger. Offensichtlich nicht ideal, aber besser als jede Datei einzeln zu öffnen.

Viel Glück

    
DJ Quimby 30.09.2010 17:47
quelle
1

Ich bin gerade auf ein ähnliches Problem gestoßen, wo einige nicht platzende "xA0" in ein vermeintlich UTF-8 Dokument geraten sind. Im Editor ++ werden diese in einer schwarzen Box mit "xA0" angezeigt. Notepad ++ erlaubt jedoch nicht, dass sie kopiert oder eingefügt werden.

Ich habe ein wenig recherchiert und herausgefunden, was vor sich geht. Ein Hex-Editor zeigt, dass diese als ein einzelnes Byte codiert sind: "A0", was ungültiger UTF-8 ist. Alles, was nicht ASCII ist, sollte mindestens zwei Bytes lang sein, also ist die korrekte Kodierung "C2 A0" in hexadezimal.

Für Ihr fantastisches Apostroph-Beispiel haben Sie es mit der gleichen Sache zu tun. Tatsächlich ist Ihr Problem jedoch komplizierter, weil in extended ASCII-Zeichen \ x92 (dezimal 146) ein Apostroph ist, aber in Unicode \ x92 ist ein Steuerzeichen und das richtige einfache Zitat sollte U + 2019 (dezimal 8217) sein. Das Hinzufügen dieses Symbols in Notepad ++ (über Bearbeiten- & gt; Zeichenfeld) und das Inspizieren in einem Hex-Editor zeigt, dass die richtige hexadezimale Codierung "E2 80 99" ist, die binär 1110 0010 10 000000 ist 10 011001 . Wenn Sie die UTF-8-Steuerbytes (nicht fett) entfernen, ergibt dies 0010 0000 0000 0001 1001, was einem Dezimalwert von 8217 entspricht.

Der richtige Weg, dies zu tun, wäre, Ihre Datei als Bytestrom zu öffnen (unsigned char * in c) und nach nicht korrekten UTF-8-Sequenzen zu suchen. Dann können Sie sie entweder durch ersetzen (siehe Ссылка ) oder Sie können versuchen, sie selbst zu bearbeiten, indem Sie Ersetzungen wie A0 - & gt; C2 A0 (falsch codiertes nicht brechendes Leerzeichen) und 92 - & gt; E2 80 99 (falsches richtiges einfaches Anführungszeichen).

    
bruceceng 26.08.2016 19:52
quelle
0

Alle speziellen Zeichen sollten HTML-codiert sein, z.B. Ein Copyright-Symbol sollte in Ihrem HTML als

sein %Vor%

HTML-Entitätsliste:

Ссылка

Wie Sie dies implementieren, hängt weitgehend davon ab, wie Sie den Code an erster Stelle erstellen, aber etwas wie ASP.Net wird serverseitige Funktionen haben wie:

%Vor%     
TimS 30.09.2010 17:50
quelle