Publicidade (Anuncie Aqui)

Removendo TAGs HTML de textos

Removendo TAGs HTML de textos

No mundo da WEB 2.0 é muito comum sites que permitam que seus visitantes entrem com dados e textos em campos… Comentários, cadastros, nomes e por aí vai… Só que muita gente abusa da boa vontade e descuido alheio e tenta “brincar” com os sites, inserindo blocos de códigos HTML, sendo alguns deles até maliciosos, diga-se de passagem.

Você, nobre programador, precisa estar pronto para o pior… E uma frase muito comum no nosso meio é “o usuário é o seu maior inimigo“, infelizmente isso é uma realidade, e das mais cruas. Não é que todo mundo faz isso por mal… Mas, mesmo sem querer, acabam fazendo o mal, entende?

Então vou falar aqui sobre três funções que podem ser usadas para amenizar esse problema: a strip_tags(), htmlspecialchars() e a mysql_real_escape_string()… Cada uma faz uma coisa, mas todas ajudam nesse tipo de proteção.

Função strip_tags()

O que essa função faz é simples, curto e grosso: acaba, some, oculta, exclui, remove e destrói QUALQUER código HTML da string. Não importa se é um <b></b>, um <a></a>, ou um <iframe></iframe>… Vai tudo pro saco.

Veja um exempo de uso:

< ?php
// Define uma string com código HTML
$entrada = '<p>Ahá... <a href="mailto: fulaninho@uol.com.br">eu</a> sou <strong>malandrão!</strong></p>';

$saida = strip_tags($entrada);
echo $saida;
// Saída: Ahá... eu sou malandrão!
?>

Você também pode, se quiser, definir TAGs permitidas, que permanecerão na string:

< ?php
// Define uma string com código HTML
$entrada = '<p>Ahá... <a href="mailto: fulaninho@uol.com.br">eu</a> sou <strong>malandrão!</strong></p>';

$saida = strip_tags($entrada, '<strong><p>');
echo $saida;
// Saída: <p>Ahá... eu sou <strong>malandrão!</strong></p>
?>

» Documentação da strip_tags()

Função htmlspecialchars()

A htmlspecialchars não remove as TAGs HTML… Ela escapa o código HTML… Transformando-o em códigos/entidades para exibição… Ou seja, se existe um <b>Hahá!</b> na string, vai aparecer tudo, inclusive o <b></b> (e não negrito).

Exemplo de uso:

< ?php
$entrada = 'Eu sou <i>çagaiz</i>!';

$saida = htmlspecialchars($entrada);
echo $saida;
// Saída: Eu sou <i>çagaiz</i>! (Aparecerão todos os caracteres, como se o HTML fosse string)
?>

Com isso você vai poder saber exatamente o que o espertinho tentou inserir no seu código… :)

» Documentação da htmlspecialchars()

Função mysql_real_escape_string()

No quesito segurança, essa é a função mais legal.. Ela serve pra quando você for inserir aquele código malicioso (que o usuário postou) no seu banco de dados… A função escapa todos os caracteres que o MySQL possa vir a usar e se confundir achando que faz parte da sua query…

Vamos dar um exemplo:

< ?php
$nome = "Fulaninho's";

$nome = mysql_real_escape_string($nome);

$sql = "INSERT INTO `usuarios` VALUES (NULL, '".$nome."')";
mysql_query($sql);
?>

Sem o uso da função, a consulta passada para o MySQL ficaria assim:

INSERT INTO `usuarios` VALUES (NULL, 'Fulaninho's')

Repare que a aspas que fecha o valor a ser inserido, é a que vem depois do “o”, e não a que veio depois do “s”, que seria o correto… O que daria erro no MySQL ou acabaria resultado no cadastro de dados errados e pela metade.

Já usando a função, ficaria assim:

INSERT INTO `usuarios` VALUES (NULL, 'Fulaninho\'s')

O que fazer com que o nome seja inserido de forma correta, e quando você fizer um SELECT para buscar esse dado, ele virá Fulaninho’s (sem a barra).

» Documentação da mysql_real_escape_string()

E aí? O que me diz? Problemas com strings malemolentes? Nunca mais!

Você também vai gostar de ler:

Postado em HTML, MySQL, PHP, Tutoriais

Com as tags , , , , , , , , , , , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

  • Ótimo artigo e muito bem explicado, valeu por mais esse.
  • Jacqueline
    OI Thiago, estou utilizando o tinymce pra gerar um conteudo de uma noticia, mas ao salvar no banco mysql as tags de img="", são salvas no banco na forma img=\"\" com essas \ como faço p tirar isso e salvar no banco só a string? e na exibição da página eu não consigo exibir a bendita img pq foi salva de maneira "errada"
  • @Jacqueline
    Provavelmente você está manipulando os dados antes de salvar no MySQL... Talvez esteja usando um addslashes() antes de jogar no banco.

    Abraços
  • Luiz
    Olá tiago estou com uma dúvida! Como eu faço para sair de um "for" e continua executando o script por exemplo:

    for($z=0; $z resultado_cls("$z", "pro_id") > $_GET['id'] ){

    echo $prox->resultado_cls("$z", "pro_id");

    }

    }
  • Show de bola. Parabéns!
  • Antonielle
    demais o artigo parabéns thiago vc é nota dezzzzzz
  • LUIZ
    Valeu tiago obrigado pela dica.
    Muito Obrigado!
  • Luiz Carlos
    Olá tiago...Preciso de uma dica sua: É o seguinte: estou trabalhando num site que o cliente precisa atualizar
    textos da página. Queria saber qual é amelhor forma que devo salvar no banco este texto. Como faço para mostrar
    este texto formatado na página. Qual é o ponto de partida que devo seguir.
    Éra isso, desde já lhe gradeço.
    Muito obrigado.
  • @Luiz Carlos
    Procure sobre editores WYSIWYG (What You See Is What You Get), o TinyMCE é uma boa opção... Depois é só salvar o HTML criado por eles no banco de dados, em um campo LONGTEXT e pronto. :)
blog comments powered by Disqus