Gibt es einen empfohlene Weg zu entkommen <
, >
, "
und &
Zeichen bei der Ausgabe HTML in einfachen Java - Code? (Anders als manuell das Folgende zu tun).
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = source.replace("<", "<").replace("&", "&"); // ...
source.replace("&", "&").replace("<", "<");
Antworten:
StringEscapeUtils von Apache Commons Lang :
Für Version 3 :
quelle
StringEscapeUtils
es nett ist, wird das Leerzeichen für Attribute nicht ordnungsgemäß ausgeblendet, wenn Sie die Normalisierung von HTML / XML-Leerzeichen vermeiden möchten. Siehe meine Antwort für mehr Details.Eine Alternative zu Apache Commons: Verwenden Sie Spring 's
HtmlUtils.htmlEscape(String input)
Methode.quelle
StringEscapeUtils.escapeHtml()
vonapache-commons
2.6), weil es die russischen Zeichen unverändert lässt.Schöne kurze Methode:
Basierend auf https://stackoverflow.com/a/8838023/1199155 (der Verstärker fehlt dort). Die vier in der if-Klausel aktivierten Zeichen sind laut http://www.w3.org/TR/html4/sgml/entities.html die einzigen unter 128
quelle
Es gibt eine neuere Version der Apache Commons Lang-Bibliothek und sie verwendet einen anderen Paketnamen (org.apache.commons.lang3). Das hat
StringEscapeUtils
jetzt verschiedene statische Methoden, um verschiedene Arten von Dokumenten zu maskieren ( maskieren http://commons.apache.org/proper/commons-lang/javadocs/api-3.0/index.html ). So entziehen Sie sich der HTML-Version 4.0:quelle
Für diejenigen, die Google Guava verwenden:
quelle
Auf Android (API 16 oder höher) können Sie:
oder für niedrigere API:
quelle
escapeHtml
statt zu verwendenhtmlEncode
?Sei vorsichtig damit. Innerhalb eines HTML-Dokuments gibt es eine Reihe verschiedener 'Kontexte': Innerhalb eines Elements, zitierter Attributwert, nicht zitierter Attributwert, URL-Attribut, Javascript, CSS usw. Sie müssen für jedes Element eine andere Codierungsmethode verwenden diese, um Cross-Site Scripting (XSS) zu verhindern. Überprüfen Sie das OWASP XSS Prevention Cheat Sheet auf Details zu jedem dieser Kontexte. Escape-Methoden für jeden dieser Kontexte finden Sie in der OWASP ESAPI-Bibliothek - https://github.com/ESAPI/esapi-java-legacy .
quelle
Für einige Zwecke, HtmlUtils :
quelle
Die @ dfa-Antwort von
org.apache.commons.lang.StringEscapeUtils.escapeHtml
ist zwar nett und ich habe sie in der Vergangenheit verwendet. Sie sollte jedoch nicht zum Escapen von HTML- (oder XML-) Attributen verwendet werden, da sonst das Leerzeichen normalisiert wird (dh alle benachbarten Leerzeichen werden zu einem einzigen Leerzeichen).Ich weiß das, weil ich Fehler in meiner Bibliothek (JATL) für Attribute eingereicht habe, bei denen Leerzeichen nicht beibehalten wurden. Daher habe ich eine Drop-In- Klasse (Kopieren und Einfügen) (von der ich einige aus JDOM gestohlen habe), die das Entkommen von Attributen und Elementinhalten unterscheidet .
Während dies in der Vergangenheit möglicherweise nicht so wichtig war (ordnungsgemäßes Entweichen von Attributen), wird es angesichts der Verwendung der
data-
Attributverwendung von HTML5 zunehmend von größerem Interesse .quelle
org.apache.commons.lang3.StringEscapeUtils ist jetzt veraltet. Sie müssen jetzt org.apache.commons.text.StringEscapeUtils von verwenden
quelle
Die meisten Bibliotheken bieten alles, was sie können, einschließlich Hunderten von Symbolen und Tausenden von Nicht-ASCII-Zeichen, was in der UTF-8-Welt nicht das ist, was Sie wollen.
Wie Jeff Williams bemerkte, gibt es keine einzige Option für "Escape-HTML", sondern mehrere Kontexte.
Angenommen, Sie verwenden niemals nicht zitierte Attribute und denken daran, dass unterschiedliche Kontexte existieren, dann hat es meine eigene Version geschrieben:
Erwägen Sie das Einfügen von Texten aus Gist ohne Zeilenlängenbeschränkung .
quelle