terça-feira, 21 de outubro de 2008

Incursão: escapeHtml e unescapeHtml

Desenvolver software é como jogar RPG.

Vai passando o tempo, você vai adquirindo experiência, conhecendo itens, apanhando, achando maçãs e revitalizando energia.

Muitas, muitas, mas MUITAS vezes, o cara precisa fazer alguma coisa, alguma conversão, algum utilitário, que o desenvolvedor só percebe que algum bendito já pode ter deixado aquilo prontinho em algum JAR por aí quando alguém conta ou tendo um desconfiômetro afiado.

Vamos tentar explorar algumas dessas APIs que as pessoas acabam esquecendo ou nem conhecendo que existam. Enfim, vou chamar essa seção de "Incursão", a saber, by Houaiss:

Incursão
Acepções
substantivo feminino
1 irrupção de uma força militarizada em território estrangeiro; investida, ataque, invasão
2 passeio por uma região, país etc.; excursão, viagem
3 passagem rápida por um lugar


Começando por um método que achei justamente porque me perguntaram como se fazia. A idéia é converter os caracteres HTML especiais (chamados de entities) para caracteres "visíveis", e vice-versa. A classe StringEscapeUtils, do pacote org.apache.commons.lang, tem vários métodos de escape e unescape, mas em relação ao nosso problema em especifico, escapeHtml e unescapeHtml.

Segue um exemplo. Os comentários identificam o que será exibido na tela.

// Transforma as aspas em entities
// "sbroubles" = "sbroubles
"
System.out.println("\"sbroubles\" = "+StringEscapeUtils.escapeHtml("\"sbroubles\""));


// Exemplos de alguns caracteres especiais como entities
// Esses s
ão alguns caracteres especiais:
// â, <, í, ü!
System.out.println(StringEscapeUtils.escapeHtml("Esses são alguns caracteres especiais: â, <, í, ü!"));


// Exemplo de alguns entities sendo exibidos como os proprios caracteres
// Esses são alguns caracteres especiais: â, <, í, ü!

System.out.println(StringEscapeUtils.unescapeHtml("Esses s&atilde;o alguns caracteres especiais: &acirc;, &lt;, &iacute;, &uuml;!"));



Um problema que achei foi que se você tentar usar escapeHtml(...) em uma tag - <body>, por exemplo, o método vai escapar os caracteres <>. Mas nada que um append não resolva.

Isso aí, até a próxima.


Nenhum comentário: