使用 sql 服务器功能从值(和 html 解码)中删除 html 标记



我想使用 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">&#x200b;</p><p class="c0">Test the email details&nbsp;</p><p class="c0">&#x200b;</p></body></html>')) 

为此,我创建了 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

另一个功能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

当我运行它时,我得到的结果是Hi,&#x200b;Test the email details&nbsp;&#x200b;和&#x200b 值没有被删除。

但预期的结果是Hi, Test the email details

任何人都可以建议如何删除&#x200b 并仅显示所需的结果。

您在这里面临的问题是解码HTML实体的问题。

TSQL 不提供任何本机执行此操作的内容。但是一个快速的谷歌搜索向我灌输了这个SO响应,其中包含一个应该对您有所帮助的udf

或者,如果可以将数据带到 SQL Server 之外,则可以运行一个简单的 powershell 命令来(直接)删除标记并解码实体:

$clean = [System.Web.HttpUtility]::HtmlDecode($htmlString -replace '<[^>]+>','')

其中$htmlString是来自 SQL Server 的数据。

最新更新