Existe uma maneira recomendada para escapar <
, >
, "
e &
caracteres quando a saída HTML em código Java simples? (Além de fazer o seguinte manualmente).
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = source.replace("<", "<").replace("&", "&"); // ...
source.replace("&", "&").replace("<", "<");
Respostas:
StringEscapeUtils do Apache Commons Lang :
Para a versão 3 :
fonte
StringEscapeUtils
seja bom, ele não escapará do espaço em branco corretamente para atributos, se você desejar evitar a normalização do espaço em branco HTML / XML. Veja minha resposta para maiores detalhes.Uma alternativa ao Apache Commons: use o método Spring
HtmlUtils.htmlEscape(String input)
.fonte
StringEscapeUtils.escapeHtml()
doapache-commons
2.6) porque deixa os caracteres russos como estão.Bom método curto:
Com base em https://stackoverflow.com/a/8838023/1199155 (o amplificador está ausente). Os quatro caracteres marcados na cláusula if são os únicos abaixo de 128, de acordo com http://www.w3.org/TR/html4/sgml/entities.html
fonte
Existe uma versão mais recente da biblioteca Apache Commons Lang e ela usa um nome de pacote diferente (org.apache.commons.lang3). O
StringEscapeUtils
agora tem métodos estáticos diferentes para escapar de diferentes tipos de documentos ( http://commons.apache.org/proper/commons-lang/javadocs/api-3.0/index.html ). Então, para escapar da string HTML versão 4.0:fonte
Para quem usa o Google Guava:
fonte
No android (API 16 ou superior), você pode:
ou para API mais baixa:
fonte
escapeHtml
vez dehtmlEncode
?Tenha cuidado com isso. Existem vários 'contextos' diferentes em um documento HTML: dentro de um elemento, valor de atributo entre aspas, valor de atributo não entre aspas, atributo de URL, javascript, CSS, etc. Você precisará usar um método de codificação diferente para cada um dos para impedir a criação de scripts entre sites (XSS). Consulte a Folha de dicas de prevenção do OWASP XSS para obter detalhes sobre cada um desses contextos. Você pode encontrar métodos de escape para cada um desses contextos na biblioteca OWASP ESAPI - https://github.com/ESAPI/esapi-java-legacy .
fonte
Para alguns propósitos, HtmlUtils :
fonte
Embora a resposta do @dfa
org.apache.commons.lang.StringEscapeUtils.escapeHtml
seja boa e eu a tenha usado no passado, ela não deve ser usada para escapar dos atributos HTML (ou XML), caso contrário, o espaço em branco será normalizado (o que significa que todos os caracteres de espaço em branco adjacentes se tornarão um espaço único).Eu sei disso porque tive bugs arquivados na minha biblioteca (JATL) para atributos em que o espaço em branco não foi preservado. Portanto, tenho uma queda na classe (copiar e colar) (da qual roubei algumas do JDOM) que diferencia o escape de atributos e conteúdo de elementos .
Embora isso possa não ter importado tanto no passado (escape adequado de atributos), ele se torna cada vez mais interessante, devido ao uso do
data-
atributo HTML5 .fonte
org.apache.commons.lang3.StringEscapeUtils agora está obsoleto. Agora você deve usar org.apache.commons.text.StringEscapeUtils by
fonte
A maioria das bibliotecas oferece escapar de tudo o que pode, incluindo centenas de símbolos e milhares de caracteres não ASCII, o que não é o que você deseja no mundo UTF-8.
Além disso, como Jeff Williams observou, não há uma opção única de "escape HTML", existem vários contextos.
Supondo que você nunca use atributos não citados, e tendo em mente que existem diferentes contextos, ele escreveu minha própria versão:
Considere copiar e colar do Gist sem limite de comprimento de linha .
fonte