Como evitar que o browser interprete o conteúdo trazido do banco?

11 respostas
Paulo_de_Tarso

Olá,
Gostaria de saber uma forma de evitar que o browser interprete o conteúdo trazido do banco?
O usuário é livre pra digitar o que ele quiser numa caixa de texto, incluindo tags html.
Porém, ao trazer esses dados do banco, quero exibir ao usuário exatamente o que ele digitou:
Por Exemplo: Se ele gravou, “Teste”. Quero exibir “Teste” e não a palavra “Teste” grafada em Negrito?

11 Respostas

Paulo_de_Tarso

Teste.

T

Uma das formas é você trocar, manualmente, os < por &lt; e os > por &gt; Isso dá trabalho mas não é difícil.
(É que mesmo usar <pre> não é suficiente. )

Paulo_de_Tarso

Teste

Paulo_de_Tarso

Caramba,
Não queria acreditar nisso!!!

Mas deve haver uma solução de responsabilidade do browser não?

Os caracteres > só fazem sentido pro browser.

Por exemplo, se o usuário digita: “Se a nota < 7”. Não necessariamente esse < deve ser transformado num < (que é um caractere de browser).

E mesmo que fosse um par de colchetes como em “3”. Ainda assim, não significaria a simples troca desses colchetes e envio ao banco. Supondo aplicações web/desktop compartilhando a mesma base. Não faria sentido enviar pro cliente swing algo como “& l t ;”.

Abraço,

Paulo_de_Tarso

Pô,

“Colchetes” foi foda! Favor substituir por “Sinais de Inequação”.

roadhouse

o HTML não tem uma tag especifica para NÃO renderizar tags HTML?

eu acho que vi isso em algum lugar… (claro que não lembro agora)

T

O tag &lt pre &gt evita que as linhas sejam automaticamente reformatadas e deixa a fonte do texto como mono-espaçada (ou seja, todas as letras têm a mesma largura, como em uma máquina de escrever), mas os tags continuam a ser interpretados.
O tag &lt blockquote &gt só serve para aumentar a margem esquerda.
Se você olhar aqui no "source" das páginas do GUJ vai ver que os sinais < e > foram todos substituídos por &lt; e &gt;

Anderson_Schmidt

Olá,

Em Java ServerFaces quase todas as tags tem o atributo “escape”, que vem por default true, ou seja, componentes mostram caracteres tipo .

Não te ajuda?

Flws!
SChmidt

marciocamurati

Dá uma pesquisada no Google sobre escape no Java, mas você poderia usar para contornar isso por exemplo:

&lt;c:out value="${blah}" escapeXml="false"/&gt;

[]s

Paulo_de_Tarso

Bom pessoal,

Estou muito grato pela pró-atividade de vocês.

Resumindo, a solução do Márcio é perfeita. Utilizar c:out com escapeXml="true" na impressão dos textos.

Porém, ainda encontramos problemas com o display-tag. Na versão 1.1, a tag display:column também fornece o atributo escapeXml com a mesma semântica citada acima.

Porém, para a versão 1.0, precisamos criar este Column Decorator.

import org.displaytag.decorator.ColumnDecorator;

/**
 * Essa classe é um Decorator que fornece escape para sinais de inequação:
 * "<" e ">". Na prática, ela substitui os sinais por seus respectivos códigos
 * HTML: "&lt;" e "&gt;".
 * 
 * Possibilita a exibição correta de tags XML, HTML e SCRIPT.
 * 
 * Criado em 10/04/2007.
 * @author Adilton Souza [[email removido]]
 * @author Carlos Eduardo Freitas [[email removido]]
 * @author Paulo de Tarso [[email removido]]
 * @version 1.0
 */
public class EscapeXMLColumnDecorator implements ColumnDecorator
{

    /**
     * Define o código HTML para o sinal de menor que (<).
     */
    private static final String MENOR_QUE = "&lt;";
    
    /**
     * Define o código HTML para o sinal de maior que (>).
     */
    private static final String MAIOR_QUE = "&gt;";
    
    public EscapeXMLColumnDecorator()
    {
    }
    
    /**
     * Através desse método o DisplayTag busca a formatação correta do campo.
     * 
     * @return String representando o texto com escape de tags.
     * @param columnValue valor a ser reformatado
     */
    public final String decorate(final Object columnValue)
    {
        return columnValue.toString().replaceAll("<", MENOR_QUE)
                .replaceAll(">", MAIOR_QUE);
    }
    
}

E na JSP teremos isso:

<display:column property="nmDescricao" title="Descri&ccedil;&atilde;o"
            decorator="br.gov.dataprev.corporativo.util.EscapeXMLColumnDecorator" />

Valeu pessoal,

Paulo_de_Tarso

Bom pessoal,

Estou muito grato pela pró-atividade de vocês.

Resumindo, a solução do Márcio é perfeita. Utilizar c:out com escapeXml="true" na impressão dos textos.

Porém, ainda encontramos problemas com o display-tag. Na versão 1.1, a tag display:column também fornece o atributo escapeXml com a mesma semântica citada acima.

Porém, para a versão 1.0, precisamos criar este Column Decorator.

import org.displaytag.decorator.ColumnDecorator;

/**
 * Essa classe é um Decorator que fornece escape para sinais de inequação:
 * "<" e ">". Na prática, ela substitui os sinais por seus respectivos códigos
 * HTML: "&lt;" e "&gt;".
 * 
 * Possibilita a exibição correta de tags XML, HTML e SCRIPT.
 * 
 * Criado em 10/04/2007.
 * @author Adilton Souza [[email removido]]
 * @author Carlos Eduardo Freitas [[email removido]]
 * @author Paulo de Tarso [[email removido]]
 * @version 1.0
 */
public class EscapeXMLColumnDecorator implements ColumnDecorator
{

    /**
     * Define o código HTML para o sinal de menor que (<).
     */
    private static final String MENOR_QUE = "&lt;";
    
    /**
     * Define o código HTML para o sinal de maior que (>).
     */
    private static final String MAIOR_QUE = "&gt;";
    
    public EscapeXMLColumnDecorator()
    {
    }
    
    /**
     * Através desse método o DisplayTag busca a formatação correta do campo.
     * 
     * @return String representando o texto com escape de tags.
     * @param columnValue valor a ser reformatado
     */
    public final String decorate(final Object columnValue)
    {
        if ( columnValue == null )
        {
             return null;
        }

        return columnValue.toString().replaceAll("<", MENOR_QUE)
                .replaceAll(">", MAIOR_QUE);
    }
    
}

E na JSP teremos isso:

<display:column property="nmDescricao" title="Descri&ccedil;&atilde;o"
            decorator="br.gov.dataprev.corporativo.util.EscapeXMLColumnDecorator" />

Valeu pessoal,

Criado 9 de abril de 2007
Ultima resposta 10 de abr. de 2007
Respostas 11
Participantes 5