Frage

ich eine Reihe von Websites, die ungültigen Zeichen zu machen. Die Seiten Meta-Tags UTF-8-Codierung angeben. Allerdings enthält eine Anzahl von Seiten Zeichen, die von UTF-8 nicht interpretiert werden können, wahrscheinlich, weil die Dateien mit einem anderen Codierung (wie ANSI) gespeichert wurden. Derjenige insbesondere ich jetzt besorgt bin ist eine Phantasie Apostroph (wie in „ Bob “ ... sorry, wenn das zeigt nicht korrekt). W3 der Validator gibt die Einheit ist „ \ x92 “, aber es wird die Datei nicht überprüfen, weil es nicht zu Unicode abbildet. Und natürlich, wenn ich die Datei in Notepad ++ öffnen und die Kodierung UTF-8 ändern, wird das Zeichen durch ein 92 in einem schwarzen Kasten ersetzt.

Hier ist meine Frage: Was ist der einfachste Weg, dies zu beheben? Muss ich alle Seiten öffnen sind und die Zeichen mit einem herkömmlichen Apostroph ersetzen? Oder gibt es eine schnelle Lösung ich hinzufügen könnte (zum Beispiel zu IIS), die außer Kraft setzen könnte oder die Codierung Problem beheben? Oder muss ich auf Brute-Force-Suchen / Ersetzen? Ich habe Hunderte von Seiten auf diesen Websites und ich habe keine Ahnung, wie viele von ihnen, dass ich zu ändern haben würde, also wenn jemand einen Weg kennt, konnte ich entweder dieses Problem umgehen oder beheben schnell würde ich es zu schätzen wissen.

War es hilfreich?

Lösung

dienen die Seiten als gerade HTML, oder haben Sie ein anderes Skript den Inhalt dient? Wenn Sie ein Skript, das den Inhalt dient, könnte das Skript für jede Instanz von \ x92 anschauen und ersetzen Sie es mit einem Apostroph. In PHP würde dies eine einfache str_replace sein ()

Wenn Sie gerade HTML sind dient dann werden Sie tatsächlich die Dateien selbst zu modifizieren. Dies kann automatisiert werden, aber (und sollte wohl sein, wenn Sie Hunderte von Dateien), je nachdem, was Werkzeuge, die Sie zur Verfügung haben und was Betriebssystem Sie sind in. Da Sie sagten, Sie verwenden Notepad ++ Ich nehme an, es ist sicher anzunehmen Sie sind in MS Windows (also keinen Spaß Unix-Befehle Geschwindigkeit Dinge)

Es kann möglich sein, einen Batch-Skript zu schaffen, die dies tun können, aber. Es gibt sehr einfache ASCII-Text-Editing-Tools in der Command Prompt gebaut. Wenn das nicht möglich ist, dann ist es sehr gut möglich, ein C oder C ++ Programm zu machen, dies zu tun, wenn Sie einen Compiler auf Ihrem System und moderate Kenntnisse von C haben Wenn Sie die früheren und nicht die letztere haben, fragen und ich werde einige Peitschen Quelle für Sie.

Andere Tipps

Ich bin mir nicht sicher über die für einen Teil davon selbst, aber wenn Sie mit aufzuwickeln es Kraft mit brutaler zu tun, könnten Sie immer ein kurzes Programm schreiben, dass iteriert durch alle Ihre Web-Seiten, lädt jede Datei in den Speicher , läuft ein Regex.Replace das Problem Charakter zu beheben, und speichert die Datei auf der Festplatte zurück. Offensichtlich nicht ideal, aber besser als jede Datei auf Ihrem eigenen zu öffnen.

Good Luck

Ich lief in ein ähnliches Problem, bei dem einige nicht brechen Räumen „xA0“ gerieten in ein vermeintlich UTF-8-Dokument. In Notepad ++ werden diese in einem schwarzen Kasten mit „xA0“ geschrieben in ihm angezeigt. Allerdings Notepad ++ erlaubt sie nicht kopiert oder eingefügt werden.

habe ich ein wenig Forschung und fand heraus, was los ist. Ein Hexeditor zeigt, dass diese als ein einziges Byte codiert werden: „A0“, die ungültigen UTF-8 ist. Alles, was nicht ASCII mindestens zwei Bytes sein sollte, so dass die richtige Codierung „C2 A0“ in hexadezimal ist.

Für Ihre Phantasie Apostroph Beispiel Sie mit der gleichen Sache zu tun hat. Eigentlich aber ist das Problem komplizierter, weil im erweiterten ASCII-Zeichen \ x92 (dezimal 146) ein Apostroph ist aber in Unicode \ x92 ist ein Steuerzeichen und das richtige Apostroph sollte U + 2019 (dezimal 8217) sein. Durch Hinzufügen dieses Symbols in Notepad ++ (via Edit-> Zeichenfenster) und in einer Hexeditor Inspektion zeigt, dass die richtige hexadezimale Codierung ist "E2 80 99", die in binären 1110 0010 10 000000 10 011001 . Wenn Sie das UTF-8-Steuerbytes (nicht fett) Dies ergibt 0010 0000 0000 0001 1001 entfernen, die zu einem Dezimalwert von 8217 entsprechen.

Die richtige Art und Weise des Umgangs mit diesem wäre Ihre Datei als Byte-Stream zu öffnen (unsigned char * in c) und der Suche nach unangebrachten UTF-8-Sequenzen. Dann können Sie entweder ersetzen sie durch (siehe https://en.wikipedia.org/wiki / UTF-8 # Invalid_byte_sequences ) oder Sie können, indem sie Ersatz wie A0 sie, um benutzerdefinierte Griff versuchen -> C2 A0 (unsachgemäß Geschütztes Leerzeichen codiert) und 92 -> E2 80 99 (nicht ordnungsgemäß rechts Apostroph codierte Markierung ).

Alle Sonder charcters sollte HTML codiert, z.B. ein Copyright-Symbol sollte als

in Ihrem HTML sein
©

HTML-Entity-Liste:

http://www.w3schools.com/HTML/html_entities.asp

Was, wie Sie dies weitgehend implementieren hängt davon ab, wie Sie den Code in erster Linie schaffen, aber so etwas wie ASP.Net wird wie serverseitige Funktionen hat:

Server.HTMLEncode("string with special chars")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top