Est - il un moyen recommandé pour échapper <
, >
, "
et &
caractères lors de la génération HTML dans le code Java simple? (À part faire manuellement ce qui suit, c'est-à-dire).
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = source.replace("<", "<").replace("&", "&"); // ...
source.replace("&", "&").replace("<", "<");
Réponses:
StringEscapeUtils d' Apache Commons Lang :
Pour la version 3 :
la source
StringEscapeUtils
soit bien, il n'échappera pas correctement aux espaces blancs pour les attributs si vous souhaitez éviter la normalisation des espaces blancs HTML / XML. Voir ma réponse pour plus de détails.Une alternative à Apache Commons: utilisez la méthode Spring
HtmlUtils.htmlEscape(String input)
.la source
StringEscapeUtils.escapeHtml()
partir deapache-commons
2.6) parce qu'il laisse des caractères russes tel quel.Belle méthode courte:
Basé sur https://stackoverflow.com/a/8838023/1199155 (l'ampli y manque). Les quatre caractères cochés dans la clause if sont les seuls en dessous de 128, selon http://www.w3.org/TR/html4/sgml/entities.html
la source
Il existe une version plus récente de la bibliothèque Apache Commons Lang et elle utilise un nom de package différent (org.apache.commons.lang3). Le
StringEscapeUtils
possède maintenant différentes méthodes statiques pour échapper à différents types de documents ( http://commons.apache.org/proper/commons-lang/javadocs/api-3.0/index.html ). Donc, pour échapper à la chaîne HTML version 4.0:la source
Pour ceux qui utilisent Google Guava:
la source
Sur Android (API 16 ou supérieure), vous pouvez:
ou pour une API inférieure:
la source
escapeHtml
place dehtmlEncode
?Soyez prudent avec cela. Il existe un certain nombre de «contextes» différents dans un document HTML: à l'intérieur d'un élément, valeur d'attribut citée, valeur d'attribut non cotée, attribut URL, javascript, CSS, etc ... Vous devrez utiliser une méthode de codage différente pour chacun des ceux-ci pour empêcher le Cross-Site Scripting (XSS). Consultez la feuille de triche de prévention OWASP XSS pour plus de détails sur chacun de ces contextes. Vous pouvez trouver des méthodes d'échappement pour chacun de ces contextes dans la bibliothèque OWASP ESAPI - https://github.com/ESAPI/esapi-java-legacy .
la source
À certaines fins, HtmlUtils :
la source
Bien que la réponse @dfa de
org.apache.commons.lang.StringEscapeUtils.escapeHtml
soit agréable et que je l'ai utilisée dans le passé, elle ne devrait pas être utilisée pour échapper les attributs HTML (ou XML) sinon le blanc sera normalisé (ce qui signifie que tous les caractères adjacents deviennent un seul espace).Je le sais parce que des bogues ont été déposés contre ma bibliothèque (JATL) pour les attributs où les espaces blancs n'étaient pas préservés. J'ai donc une classe drop (copy n 'paste) (dont j'en ai volé une partie de JDOM) qui différencie l'échappement des attributs et du contenu des éléments .
Bien que cela n'ait peut-être pas eu autant d'importance dans le passé (échappement correct des attributs), cela devient de plus en plus intéressant compte tenu de l'utilisation de l'utilisation des
data-
attributs HTML5 .la source
org.apache.commons.lang3.StringEscapeUtils est désormais obsolète. Vous devez maintenant utiliser org.apache.commons.text.StringEscapeUtils par
la source
La plupart des bibliothèques proposent d'échapper à tout ce qu'elles peuvent, y compris des centaines de symboles et des milliers de caractères non ASCII, ce qui n'est pas ce que vous voulez dans le monde UTF-8.
De plus, comme l'a noté Jeff Williams, il n'y a pas une seule option «d'échappement HTML», il existe plusieurs contextes.
En supposant que vous n'utilisez jamais d'attributs non cités et en gardant à l'esprit que différents contextes existent, il a écrit ma propre version:
Envisagez de copier-coller à partir de Gist sans limite de longueur de ligne .
la source