使用sql server函数消除值(和html解码)中的html标记

时间:2017-11-01 14:32:30

标签: html sql-server

我想使用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>')) 
&#13;
&#13;
&#13;

为此我创建了2个函数 udf_StripStyle 删除样式

&#13;
&#13;
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;
&#13;
&#13;

另一个 udf_StripHTML 功能,用于删除HTML标记

&#13;
&#13;
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;
&#13;
&#13;

当我运行此操作时,我得到的结果为Hi,&#x200b;Test the email details&nbsp;&#x200b;,并且&amp;#x200b值未被删除。

但预期结果为Hi, Test the email details

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

1 个答案:

答案 0 :(得分:0)

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

TSQL本身不提供任何操作。但是快速谷歌搜索会给我this SO响应,其中包含一个应该帮助你的udf

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

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

$ htmlString 是来自SQL Server的数据。