猿问

从sql server中的字符串中删除html标签的最佳方法?

从sql server中的字符串中删除html标签的最佳方法?

我在SQL Server 2005中有包含html标签的数据,我想将所有内容删除,只留下标签之间的文本。理想的情况下也更换喜欢的东西&lt;<

有没有一种简单的方法可以做到这一点,或者有人已经有一些示例t-sql代码?

我没有能力添加扩展存储过程等,所以更喜欢纯t-sql方法(最好是一个向后兼容sql 2000)。

我只想用剥离的html检索数据,而不是更新它,所以理想情况下它会被写成用户定义的函数,以便于重用。

所以例如转换这个:

<B>Some useful text</B>&nbsp;<A onclick="return openInfo(this)"
   href="http://there.com/3ce984e88d0531bac5349"
   target=globalhelp>
   <IMG title="Source Description" height=15 alt="Source Description" 
        src="/ri/new_info.gif" width=15 align=top border=0></A>&gt;&nbsp;<b>more text</b></TD></TR>

对此:

Some useful text > more text


MMMHUHU
浏览 1103回答 3
3回答

qq_花开花谢_0

有一个UDF将执行此处描述的操作:剥离HTML的用户定义函数CREATE&nbsp;FUNCTION&nbsp;[dbo].[udf_StripHTML]&nbsp;(@HTMLText&nbsp;VARCHAR(MAX))RETURNS&nbsp;VARCHAR(MAX)&nbsp;ASBEGIN &nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;@Start&nbsp;INT&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;@End&nbsp;INT&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;@Length&nbsp;INT&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@Start&nbsp;=&nbsp;CHARINDEX('<',@HTMLText) &nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@End&nbsp;=&nbsp;CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) &nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@Length&nbsp;=&nbsp;(@End&nbsp;-&nbsp;@Start)&nbsp;+&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;WHILE&nbsp;@Start&nbsp;>&nbsp;0&nbsp;AND&nbsp;@End&nbsp;>&nbsp;0&nbsp;AND&nbsp;@Length&nbsp;>&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;BEGIN &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@HTMLText&nbsp;=&nbsp;STUFF(@HTMLText,@Start,@Length,'') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@Start&nbsp;=&nbsp;CHARINDEX('<',@HTMLText) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@End&nbsp;=&nbsp;CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;@Length&nbsp;=&nbsp;(@End&nbsp;-&nbsp;@Start)&nbsp;+&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;END &nbsp;&nbsp;&nbsp;&nbsp;RETURN&nbsp;LTRIM(RTRIM(@HTMLText))ENDGO编辑:请注意这是针对SQL Server 2005的,但是如果将关键字MAX更改为类似4000,它也可以在SQL Server 2000中使用。

PIPIONE

如果您的HTML格式正确,我认为这是一个更好的解决方案:create&nbsp;function&nbsp;dbo.StripHTML(&nbsp;@text&nbsp;varchar(max)&nbsp;)&nbsp;returns&nbsp;varchar(max)&nbsp;asbegin &nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;@textXML&nbsp;xml &nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;@result&nbsp;varchar(max) &nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@textXML&nbsp;=&nbsp;REPLACE(&nbsp;@text,&nbsp;'&',&nbsp;''&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;doc(contents)&nbsp;as &nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;chunks.chunk.query('.')&nbsp;from&nbsp;@textXML.nodes('/')&nbsp;as&nbsp;chunks(chunk) &nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;@result&nbsp;=&nbsp;contents.value('.',&nbsp;'varchar(max)')&nbsp;from&nbsp;doc&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;@resultendgoselect&nbsp;dbo.StripHTML('This&nbsp;<i>is</i>&nbsp;an&nbsp;<b>html</b>&nbsp;test')
随时随地看视频慕课网APP
我要回答