2012-03-02 12 views
-1

を使用してHTMLタグを削除し、私の文字列です:ここStringTokenizerは

String str = "<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font>   
<font 
size="4"><strong>"; 

私はStringTokenizerを使用して文字列内のすべてのHTMLタグを削除します。しかし、私はこのような状況でStringTokenizerを使用する方法を理解していません。 str.replaceAll("\\<.*?>","")を使用すると、上の文字列のように、一部のタグが文字列の次の行にあるため、すべてのタグを削除すると効率的ではないためです。しかし、私は<>の間のすべての状況でそれをやりたい。どうしたらいいですか? (私はStringTokenizerを使ってそれを達成したい)。ありがとう..

+0

A)あなたは 'StringTokenizer'を使用すべきではありません。ドキュメントの状態として、それはレガシークラスです。B)正規表現を使ってHTMLを解析しようとするのは無駄です。 –

+0

@BrianRoach htmlタグJSonを削除するための別のライブラリがありますが、私は他のライブラリを使用することができません。それを実現する他の方法はないようです。 – El3ctr0n1c4

+0

他のライブラリを使用できないのはなぜですか? – DNA

答えて

1

regexesまたはStringTokenizerだけでHTMLを処理しようとすると...痛いです。

This answerは、これ以上先に読む必要はありません。

改行を削除して正規表現を適用した後、HTMLを再フォーマットするか、複数行の正規表現を試してみてください。

しかし、実際には適切なHTMLパーサーを使用してください。 this questionを参照してください。

2

一般に、HTMLを解析するライブラリ以外のHTMLは解析しないでください。独自のパーサーを作成するとセキュリティリスクが発生し、クロスサイトスクリプティングやその他のさまざまなバグのような攻撃の可能性があるアプリケーションにアプリケーションが公開されます。再度:正規表現や単純なトークナイザでHTMLを解析しないでください。このルールの例外は、既知のHTMLデータ入力が少なく、そのデータにコードを使用する場合です。のみです。このシナリオでは、コードが各入力に対して正しいことを行っていることを確認することができます。

つまり、元の正規表現は非常に近いです。ドットワイルドカードは改行以外のすべてにマッチするので、ドットワイルドカードに加えて改行の可能性を正規表現に追加すると、テスト文字列に肯定的な結果が得られます。

String result = str.replaceAll("<(.|\r|\n|\f)*?>",""); 

UNKNOWN入力時にこのコードを使用しないでください!それを生産に使用しないでください! HTMLの閲覧には安全で正確なアプローチはありません。

+0

+1正規表現を使用してHTMLを解析することについて正しく警告します。 [必須リンク](http://stackoverflow.com/a/1732454/960195)?)。ただし、クロスサイトスクリプティングは、攻撃者がユーザーのブラウザを悪意のあるコード(通常はJavaScript)を実行する*にトリックすることができる特定の種類のバグです。単純にHTMLを解析しても、何も実行していないため、XSSまで開くことはできません。 –

0

StringTokenizerの代わりにHTMLパーサライブラリを使用する方がよいでしょう。 http://jsoup.org/downloadから

  1. ダウンロードjsoup-1.6.1.jarのコアライブラリ:次のデモを見てください。
  2. このライブラリをクラスパスに追加します。
  3. 好きなようにHTMLで再生します。以下の例は、HTMLコンテンツをテキスト形式に変換するコードです。

    import org.jsoup.Jsoup;

    パブリッククラスHtmlParser {

    public static String removeAllHtml(String htmlContent) { 
        return Jsoup.parse(htmlContent).text(); 
    } 
    
    public static void main(String[] args) { 
        String htmlContent = "<pre><font size=\"5\"><strong><u>LVI . The Day of Battle</u></strong></font><fontsize=\"4\"><strong>"; 
        System.out.println(removeAllHtml(htmlContent)); 
    } 
    

    }

関連する問題