Estamos haciendo una consulta a una tabla, y vemos que la tabla tiene un texto. Pero vemos que el propio texto contiene etiquetas HTML que nos molestan o no deberían estar ahí (se aplicarían formatos de cualquier editor de textos WYSIWYG) y cuando vamos a extraer la información nos molesta.
Pero tenemos prisa y tendríamos que modificar o crear un programa y no tenemos tiempo. ¿Qué hacemos? Pues tengo la función que estás buscando, su funcionamiento es pasar un texto por parámetro y eliminar HTML en SQL.
Nota: Este procedimiento sirve para SQL Server.
Características de la función
- Sustituye cualquier carácter especial ASCII por el carácter visible que corresponde. ( ‘ù’ ➜ ‘ù’ )
- Eliminar etiquetas HTML, cualquier etiqueta que lleve los signos <>.
Te dejo una tabla de caracteres ASCII sencilla en la que entenderás después algunos conceptos 😉
Función eliminar HTML
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Funcion que se encarga de decodificar textos en HTML ALTER FUNCTION [dbo].[eliminarHTML](@HTMLText varchar(MAX)) RETURNS varchar(MAX) AS BEGIN DECLARE @Start int DECLARE @End int DECLARE @Length int -- Sustituye cualquier carácter especial ASCII por el carácter visible que corresponde. SET @HTMLText = REPLACE(@HTMLText, '<br>', CHAR(13) + CHAR(10)) SET @HTMLText = REPLACE(@HTMLText, '<br/>', CHAR(13) + CHAR(10)) SET @HTMLText = REPLACE(@HTMLText, '&amp;', '&') SET @HTMLText = REPLACE(@HTMLText, '&', '&') SET @HTMLText = REPLACE(@HTMLText, '<', '<') SET @HTMLText = REPLACE(@HTMLText, '>', '>') SET @HTMLText = REPLACE(@HTMLText, ' ', ' ') SET @HTMLText = REPLACE(@HTMLText, '€', '€') SET @HTMLText = REPLACE(@HTMLText, 'ª', 'ª') SET @HTMLText = REPLACE(@HTMLText, 'º', 'º') SET @HTMLText = REPLACE(@HTMLText, 'á', 'á') SET @HTMLText = REPLACE(@HTMLText, 'á', 'á') SET @HTMLText = REPLACE(@HTMLText, 'é', 'é') SET @HTMLText = REPLACE(@HTMLText, 'é', 'é') SET @HTMLText = REPLACE(@HTMLText, 'í', 'í') SET @HTMLText = REPLACE(@HTMLText, 'í', 'í') SET @HTMLText = REPLACE(@HTMLText, 'ó', 'ó') SET @HTMLText = REPLACE(@HTMLText, 'ó', 'ó') SET @HTMLText = REPLACE(@HTMLText, 'ú', 'ú') SET @HTMLText = REPLACE(@HTMLText, 'ú', 'ú') SET @HTMLText = REPLACE(@HTMLText, 'à', 'à') SET @HTMLText = REPLACE(@HTMLText, 'à', 'à') SET @HTMLText = REPLACE(@HTMLText, 'è', 'è') SET @HTMLText = REPLACE(@HTMLText, 'è', 'è') SET @HTMLText = REPLACE(@HTMLText, 'ì', 'ì') SET @HTMLText = REPLACE(@HTMLText, 'ì', 'ì') SET @HTMLText = REPLACE(@HTMLText, 'ò', 'ò') SET @HTMLText = REPLACE(@HTMLText, 'ò', 'ò') SET @HTMLText = REPLACE(@HTMLText, 'ù', 'ù') SET @HTMLText = REPLACE(@HTMLText, 'ù', 'ù') SET @HTMLText = REPLACE(@HTMLText, 'Á', 'Á') SET @HTMLText = REPLACE(@HTMLText, 'Á', 'Á') SET @HTMLText = REPLACE(@HTMLText, 'É', 'É') SET @HTMLText = REPLACE(@HTMLText, 'É', 'É') SET @HTMLText = REPLACE(@HTMLText, 'Í', 'Í') SET @HTMLText = REPLACE(@HTMLText, 'Í', 'Í') SET @HTMLText = REPLACE(@HTMLText, 'Ó', 'Ó') SET @HTMLText = REPLACE(@HTMLText, 'Ó', 'Ó') SET @HTMLText = REPLACE(@HTMLText, 'Ú', 'Ú') SET @HTMLText = REPLACE(@HTMLText, 'Ú', 'Ú') SET @HTMLText = REPLACE(@HTMLText, 'À', 'À') SET @HTMLText = REPLACE(@HTMLText, 'À', 'À') SET @HTMLText = REPLACE(@HTMLText, 'È', 'È') SET @HTMLText = REPLACE(@HTMLText, 'È', 'È') SET @HTMLText = REPLACE(@HTMLText, 'Ì', 'Ì') SET @HTMLText = REPLACE(@HTMLText, 'Ì', 'Ì') SET @HTMLText = REPLACE(@HTMLText, 'Ò', 'Ò') SET @HTMLText = REPLACE(@HTMLText, 'Ò', 'Ò') SET @HTMLText = REPLACE(@HTMLText, 'Ù', 'Ù') SET @HTMLText = REPLACE(@HTMLText, 'Ù', 'Ù') SET @HTMLText = REPLACE(@HTMLText, 'Ç', 'Ç') SET @HTMLText = REPLACE(@HTMLText, 'ç', 'ç') SET @HTMLText = REPLACE(@HTMLText, 'Ñ', 'Ñ') SET @HTMLText = REPLACE(@HTMLText, 'ñ', 'ñ') SET @HTMLText = REPLACE(@HTMLText, 'Ý', 'Ý') SET @HTMLText = REPLACE(@HTMLText, 'ý', 'ý') SET @HTMLText = REPLACE(@HTMLText, '&#iquest;', '¿') SET @HTMLText = REPLACE(@HTMLText, '¿', '¿') -- Elimina cualquier cosa entre las etiquetas <>. 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
Importante: Recuerda que para crear primero la función hay que sustituir ALTER FUNCTION por CREATE FUNCTION, ejecutamos la función y volvemos a dejarlo como ALTER FUNCTION.
Probamos la función
select dbo.eliminarHTML('<strong>Prueba de escritura</strong> en el sofá');
Y nos devuelve…
Prueba de escritura en el sofá
Si te ha gustado esta utilidad de SQL, te recomiendo que visites toda nuestra categoria de SQL . Tenemos más utilidades como estas 😉
2 comentarios en “Eliminar HTML en SQL”
Muy practico y esencial
Muchas gracias!