1. ホーム
  2. html

[解決済み] SQL Serverで文字列からHTMLタグを取り除くには?

2022-07-02 14:22:47

質問

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

どのように解決するのですか?

そのためのUDFがありますので、こちらを参照してください。

HTMLを除去するユーザー定義関数

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('<',@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

編集:これはSQL Server 2005用ですが、キーワードMAXを4000などに変更すれば、SQL Server 2000でも動作することに注意してください。