T-SQL替换除P标记之外的HTML标记

时间:2017-09-22 08:58:27

标签: sql-server function tsql

我有这个功能,在互联网上有很好的记录,可以在SQL查询中删除HTML。

CREATE FUNCTION [dbo].[fnStripHTML] (@HTMLText VARCHAR(MAX))
 RETURNS VARCHAR(MAX)
 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

我需要修改此函数以除去打开和关闭p标签<p></p>之外的所有HTML。

是否有人能够提供帮助,因为我已经有一段时间了,并且还没有取得突破。

提前致谢。

安德鲁

1 个答案:

答案 0 :(得分:1)

即使在SQL中,也可能有更好的方法。正如评论中所提到的, 最好的方法是不要在SQL中尝试这样做,而是在适合HTML解析的工具中。无论如何,你可以试试这个:

你可以从

开始
SET @HTMLText = REPLACE(REPLACE(@HTMLText, '<P>', 'DONOTDELETEOPENINGTAG'), '<\p>', 'DONOTDELETECLOSINGTAG'))

执行剩余的删除操作,并以:

结束
SET @HTMLText = REPLACE(REPLACE(@HTMLText, 'DONOTDELETEOPENINGTAG', '<P>'), 'DONOTDELETECLOSINGTAG', '<\p>'))

当然,您必须确保值'DONOTDELETEOPENINGTAG''DONOTDELETECLOSINGTAG'不会出现在字符串的其余部分中。它们似乎不太可能,但你永远不会知道......