2017-09-22 21 views
0

この機能は、SQLクエリでHTMLを取り除くためにインターネット上で十分に文書化されています。T-SQL Pタグ以外の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

なぜ*データベース*でこれをやっていますか? HTMLタグの解析と置き換えは、通常は形式が不正なため、**難しい**です。正規表現を使って尋ねることはできません。単純なパターン置換はほとんどありません –

+0

サニタイザライブラリ、正規表現、XML変換を使用して、*クライアント側でHTMLをクリーンアップすることHTMLの敏捷性のようなHTML解析ライブラリが含まれます。 –

+0

@PanagiotisKanavosとここで合意しました。あなたが他の場所で行うことができない場合、あなたのためにそれを消毒するあなたの選択のいくつかの言語で小さなコンソール/ Webアプリケーションを構築するだけです。テキストの置換、デバッグ、ロギングのための優れたツール。 –

答えて

1

SQLであっても、より良い方法があるかもしれません。コメントに記載されているように、は、SQLでこれをやろうとするのではなく、HTMLの解析に適したツールです。とにかく、あなたはこの試みることができる:

をあなたは

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

を開始することができ、あなたの除去の残りを行い、で終わる:もちろん

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

を使用すると、値を確認する必要があり'DONOTDELETEOPENINGTAG'および'DONOTDELETECLOSINGTAG'は残りの文字列には表示されません。彼らはそう思わないでしょうが、あなたは決して知りません...

+0

ありがとう@honeybadger。私はこれをやったが、簡単に再利用できるように関数を使うことを望んでいた。 – user3455191

+0

いつでも好きなように関数に入れることができます。 – HoneyBadger

+0

"より良い方法"は、最初にT-SQLでこれをしないことです。 HTMLはそれ自身で解析することは知られていませんが、プログラムやユーザーが作成した不完全なHTMLを扱うのはずっと少ない –