我有这个功能,在互联网上有很好的记录,可以在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。
是否有人能够提供帮助,因为我已经有一段时间了,并且还没有取得突破。
提前致谢。
安德鲁
答案 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'
不会出现在字符串的其余部分中。它们似乎不太可能,但你永远不会知道......