7 Stimmen

Kann ich beim Escapen einer Zeichenkette mit HTML-Entities die Kodierung von Zeichen oberhalb von Unicode 127 sicher überspringen, wenn ich UTF-8 verwende?

Bei der Ausgabe einer Zeichenkette in HTML muss man aus verständlichen Gründen Sonderzeichen als HTML-Entities ("&<>" usw.) entschlüsseln.

Ich habe zwei Java-Implementierungen dieses Verfahrens untersucht: org.apache.commons.lang.StringEscapeUtils.escapeHtml(String) net.htmlparser.jericho.CharacterReference.encode(CharSequence)

Beide umgehen alle Zeichen oberhalb des Unicode-Codepunkts 127 (0x7F), d. h. alle nicht-englischen Zeichen.

Dieses Verhalten ist in Ordnung, aber die erzeugten Zeichenketten sind nicht für Menschen lesbar, wenn die Zeichen nicht englisch sind (z. B. in Hebräisch oder Arabisch). Ich habe gesehen, dass Zeichen oberhalb von Unicode 127 in Browsern korrekt wiedergegeben werden, wenn sie nicht auf diese Weise escaped werden - ich glaube, das liegt daran, dass die HTML-Seite UTF-8-kodiert ist und diese Zeichen daher für den Browser verständlich sind.

Meine Frage: Kann ich das Escapen von Unicode-Zeichen oberhalb von Codepunkt 127 beim Escapen von HTML-Entities sicher deaktivieren, sofern meine Webseite UTF-8-kodiert ist?

6voto

Álvaro González Punkte 134708

Sie müssen HTML-Entities nur in zwei Fällen verwenden:

  • Um ein Zeichen zu entschlüsseln, das in HTML eine besondere Bedeutung hat (z. B. < )
  • Um ein Zeichen anzuzeigen, das nicht zur Dokumentenkodierung gehört (z. B. das Symbol in einem ISO-8859-1-Dokument)

Da UTF-8 alle Unicode-Zeichen darstellen kann, gilt nur der erste Fall.

Bei der manuellen Eingabe von HTML kann es sich als praktisch erweisen, ab und zu eine HTML-Entität einzufügen, wenn Ihr Editor und/oder Ihre Tastatur die Eingabe bestimmter Zeichen nicht zulässt (es ist einfacher, einfach &copy; anstatt herauszufinden, wie man ein © eintippt), aber wenn man Text automatisch umbricht, vergrößert man nur die Seite ;-)

Ich kenne mich mit Java nur wenig aus, aber andere Sprachen haben verschiedene Funktionen zur Kodierung von Sonderzeichen und allen möglichen Entitäten.

4voto

Joachim Sauer Punkte 290477

Wenn senden Sie die Kodierung in der Kopfzeile mime-type:

Content-Type: text/html; charset=utf-8

dann interpretiert der Browser Ihren Quelltext als UTF-8 und Sie können alle diese Zeichen als normale UTF-8-kodierte Bytes senden.

Alternativ können Sie die Kodierung in der Kopfzeile Ihrer HTML-Seite wie folgt angeben:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Dies hat den Vorteil, dass die Informationen zusammen mit der HTML-Seite gespeichert werden, wenn der Benutzer sie speichert und zu einem späteren Zeitpunkt von seiner Festplatte aus wieder aufruft.

Ich persönlich würde beides tun (die richtige Kopfzeile senden und die meta -Tag auf Ihrer HTML-Seite). Das sollte in Ordnung sein, solange die beiden Stellen über die Kodierung übereinstimmen.

Update: HTML 5 hat hinzugefügt eine neue Syntax für die Angabe der Kodierung :

<meta charset="utf-8">

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X