Pessoal,
Boa tarde!
Hoje vou mostrar a vocês como remover tags HTML de uma string no SQL Server usando apenas T-SQL. Essa function foi muito útil para mim, pois surgiu a necessidade de incluir uma coluna num relatório que era exportado para XLS (Excel), mas essa coluna era a descrição em HTML dos chamados gerados pelo sistema e no Excel não ficava muito legal aquele monte de tags HTML. Ficava bem ruim pra ler.. Foi aí que eu desenvolvi essa função e apresento a vocês.
Código fonte da função fncRemove_HTML:
CREATE FUNCTION [dbo].[fncRemove_HTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
-- Substitui a entidade HTML "&" pelo caracter '&'
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&')
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML "<" pelo caracter '<'
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '<')
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML ">" pelo caracter '>'
SET @Start = CHARINDEX('>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '>')
SET @Start = CHARINDEX('>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML "&&" pelo caracter '&'
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&')
SET @Start = CHARINDEX('&', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
END
-- Substitui a entidade HTML " " pelo caracter ' '
SET @Start = CHARINDEX(' ', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, ' ')
SET @Start = CHARINDEX(' ', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
END
-- Substitui a tag <br> pela sequência de nova linha (CHR(13) + CHR(10))
SET @Start = CHARINDEX('<br>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, CHAR(13) + CHAR(10))
SET @Start = CHARINDEX('<br>', @HTMLText)
SET @End = @Start + 3
SET @Length = (@End - @Start) + 1
END
-- Substitui a tag <br/> pela sequência de nova linha (CHR(13) + CHR(10))
SET @Start = CHARINDEX('<br/>', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, 'CHAR(13) + CHAR(10)')
SET @Start = CHARINDEX('<br/>', @HTMLText)
SET @End = @Start + 4
SET @Length = (@End - @Start) + 1
END
-- Substitui a tag <br /> pela sequência de nova linha (CHR(13) + CHR(10))
SET @Start = CHARINDEX('<br />', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, 'CHAR(13) + CHAR(10)')
SET @Start = CHARINDEX('<br />', @HTMLText)
SET @End = @Start + 5
SET @Length = (@End - @Start) + 1
END
-- Remove os parâmetros contidos nas tags HTML
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = CHARINDEX('>', @HTMLText, CHARINDEX('<', @HTMLText))
SET @Length = (@End - @Start) + 1
WHILE (@Start > 0 AND @End > 0 AND @Length > 0)
BEGIN
SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')
SET @Start = CHARINDEX('<', @HTMLText)
SET @End = CHARINDEX('>', @HTMLText, CHARINDEX('<', @HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
Código-fonte da função fncRemove_Formatacao_Html
Uma outra forma de se conseguir remover as tags e formatações HTML de uma strings, é utilização a função fncRemove_Formatacao_Html, que demonstro abaixo.
CREATE FUNCTION [dbo].[fncRemove_Formatacao_Html] (
@pe_sTexto VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE
@v_sTexto VARCHAR(MAX),
@v_iPosicaoInicio INT = 0,
@v_iPosicaoFim INT = 0,
@v_iTotalPosicoes INT = 0
SET @v_sTexto = @pe_sTexto
SET @v_sTexto = REPLACE(@v_sTexto, '<BR><BR><BR>', '<BR>')
SET @v_sTexto = REPLACE(@v_sTexto, '<BR><BR>', '<BR>')
SET @v_sTexto = REPLACE(@v_sTexto, '<BR>', '. ')
WHILE (1 = 1)
BEGIN
SET @v_iPosicaoInicio = PATINDEX('%<%', @v_sTexto)
SET @v_iPosicaoFim = ISNULL(NULLIF(PATINDEX('%>%', @v_sTexto), 0), LEN(@v_sTexto))
SET @v_iTotalPosicoes = ((@v_iPosicaoFim - @v_iPosicaoInicio) + 1)
IF (@v_iPosicaoFim<@v_iPosicaoInicio)
SET @v_sTexto = SUBSTRING(@v_sTexto, 1, @v_iPosicaoFim-1)+SUBSTRING(@v_sTexto, @v_iPosicaoFim+1, LEN(@v_sTexto))
ELSE
IF (@v_iPosicaoInicio <> 0)
SET @v_sTexto = REPLACE(@v_sTexto, SUBSTRING(@v_sTexto, @v_iPosicaoInicio, @v_iTotalPosicoes), '')
ELSE
BREAK;
SET @v_iPosicaoInicio = 0
SET @v_iPosicaoFim = 0
SET @v_iTotalPosicoes = 0
END
SET @v_sTexto = REPLACE(@v_sTexto, '..', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ',.', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '?.', '? ')
SET @v_sTexto = REPLACE(@v_sTexto, '!.', '! ')
SET @v_sTexto = REPLACE(@v_sTexto, ',.', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '.. ', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ',. ', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '?. ', '? ')
SET @v_sTexto = REPLACE(@v_sTexto, '!. ', '! ')
SET @v_sTexto = REPLACE(@v_sTexto, ',. ', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '. ', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ', ', ', ')
SET @v_sTexto = REPLACE(@v_sTexto, '? ', '? ')
SET @v_sTexto = REPLACE(@v_sTexto, '! ', '! ')
SET @v_sTexto = REPLACE(@v_sTexto, ' . ', '. ')
SET @v_sTexto = REPLACE(@v_sTexto, ' ', '')
SET @v_sTexto = RTRIM(@v_sTexto)
SET @v_sTexto = LTRIM(@v_sTexto)
RETURN @v_sTexto
END
Caso você queira utilizar essa mesma função, mas com o código fonte em C# e utilizando no CLR, para ter uma performance muito superior, veja o post SQL Server – Como converter uma string HTML para texto (Remover tags HTML) utilizando o CLR (C#).
Um abraço e até mais!


Comentários (0)
Carregando comentários…