【问题标题】:SQL Script to remove anchor tags in sql server用于删除 sql server 中的锚标记的 SQL 脚本
【发布时间】:2015-03-22 10:00:21
【问题描述】:

我有一个小要求。我只需要删除文本中的锚标记(而不是剩余的 HTML 标记),但不应删除文本。

只应删除锚标记。

我得到了以下脚本并对其进行了一些修改。它正在处理一个小问题,即</a> 没有被删除。你能帮我解决这个问题吗?

如果你有更好的主意,请告诉我。

例如

<a href="google.com">Click to</a>

Click to 不应被删除

代码:

CREATE FUNCTION [dbo].[udf_StripHTML] 
   (@HTMLText VARCHAR(MAX))
RETURNS 
   VARCHAR(MAX) 
AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT

    SET @Start = CHARINDEX('<a',@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('<a',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END

    RETURN LTRIM(RTRIM(@HTMLText))
END
GO

【问题讨论】:

  • 为什么不直接替换RETURN LTRIM(RTRIM(REPLACE(@HTMLText, '&lt;/a&gt;', ''))

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012


【解决方案1】:

试试这个。

Fiddle Demo Here

declare @HTMLText varchar(max)='<a href=''hello.com''>click me</a>'

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
select LTRIM(RTRIM(@HTMLText))

EDIT:2 仅删除锚标记&lt;a href="hello.com"&gt;&lt;/a&gt; Fiddle Demo

declare @HTMLText varchar(max)='<l href=''fvhjfshdfsd''>gsgdgfsdf</l><a href=''hello.com''>click me</a><b>aa</b>'

DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT


SET @Start = CHARINDEX('<a',@HTMLText)


SET @End =CHARINDEX('>',@HTMLText,CHARINDEX('<a',@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('<a',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<a',@HTMLText))
SET @Length = (@End - @Start) + 1
End
select REPLACE(LTRIM(RTRIM(@HTMLText)),'</a>','')

【讨论】:

  • 以上代码删除了文本中的所有html标签 Hello User 点击我 输出:Hello User点我
  • 是的,它会删除所有标签,让我更新我的答案,等待 sec@user3330998
  • 立即查看我的 EDIT 2 答案,希望对您有所帮助。 :) @user3330998
  • 优秀。我已经把这两个都变成了 SQL 函数。 :)
猜你喜欢
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多