Eliminando formatação Html

Publicado: 24/08/2006 em IntoSpaces

No processo de construção do SharpGames me deparei com uma situação muito interessante de se resolver:

Temos os conteúdos que serão inseridos dinamicamente pelos usuários, como artigos, notícias, dicas e resenhas de livros etc, isto em todo o site para diversos tipos de conteúdos inclusive nos tópicos, onde sua descrição, a qual ilustra a página do tópico normalmente terá formatação Html para adequar e personalizar a página, contendo figuras etc.
Quando temos uma lista de tópicos, eh interessante ao passar o mouse sobre ele, exibir sua descrição, porém no tooltip padrão da web não convém mostrar imagens ou formatação, somente texto limpo. E aí está o problema, remover o html e deixar apenas texto das descrições.

Pois bem, um algoritmo cai bem para isto, vamos pensar no problema:

<img src="algumaimagem.jpg">Breve descrição <a href="link.xna">texto do link</a> e assim por diante…

Minha sugestão de algoritmo para limpar os htmls é a seguinte:

1) Encontrar o caracter que determina o início de uma tag html "<";
2) Encontrar o caracter que determina o fim de uma tag html ">";
3) Com isto temos o intervalo na string onde se encontram dados da tag;
4) Com isto conseguimos identificar que antes do início desta tag existe texto limpo então vamos armazenando em uma string auxiliar;
5) Como todo o texto limpo que antecede o final da tag ja foi todo organizado a string base para a pesquisa deve ser iniciada a partir deste ponto para nova pesquisa;
6) Os ponteiros para os indicadores de tag devem ser gerados e repete-se o procedimento até que não exista mais tags na string base para a pesquisa;

A implementação em C# para o algoritmo está logo abaixo:

public static string ClearHtmlFormatting(string text)
{
  
int start, end =-1;
  
StringBuilder builder = new StringBuilder();
  
while (((start = text.IndexOf(‘<‘)) > -1) && ((end = text.IndexOf(‘>’)) > -1))
   {
      builder.Append(text.Substring(0, start));
      text = text.Substring(end+1);
      start = end = -1;
   }
  
return builder.ToString();
}
Lembrem-se de sempre utilizaro StringBuilder para concatenações extremas pois o ganho de performance é bastante significativo.
Este algoritmo funciona, porém ainda pode ter uma série de melhorias para tratar situações não previstas para este 6 passos, alguém se habilita a continuar?

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s