我想使用sqlserver函数从HTML内容中删除标签
select dbo.udf_StripStyle(dbo.udf_StripHTML('<html><head><style type="text/css">.c0 { margin: 0px 0px 10px } </style></head><body><p class="c0">Hi,</p><p class="c0">​</p><p class="c0">Test the email details </p><p class="c0">​</p></body></html>'))
&#13;
为此我创建了2个函数 udf_StripStyle 删除样式
ALTER FUNCTION [dbo].[udf_StripStyle] (@HTMLText VARCHAR(4000))
RETURNS VARCHAR(4000) AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('.c0 {',@HTMLText)
SET @End = CHARINDEX('}',@HTMLText,CHARINDEX('.c0 {',@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('.c0 {',@HTMLText)
SET @End = CHARINDEX('}',@HTMLText,CHARINDEX('.c0 {',@HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN LTRIM(RTRIM(@HTMLText))
END
&#13;
另一个 udf_StripHTML 功能,用于删除HTML标记
ALTER FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(4000))
RETURNS VARCHAR(4000) AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
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
GO
&#13;
当我运行此操作时,我得到的结果为Hi,​Test the email details ​
,并且&amp;#x200b值未被删除。
但预期结果为Hi, Test the email details
任何人都可以建议如何移除&amp;#x200b并仅显示所需的结果。
答案 0 :(得分:0)
您在这里面临的问题是解码HTML实体。
TSQL本身不提供任何操作。但是快速谷歌搜索会给我this SO响应,其中包含一个应该帮助你的udf
。
或者,如果您可以将数据带到SQL Server之外,您可以运行一个简单的PowerShell命令(直接)删除标记并解码实体:
$clean = [System.Web.HttpUtility]::HtmlDecode($htmlString -replace '<[^>]+>','')
$ htmlString 是来自SQL Server的数据。