3

HTML を含む可能性のある文字列をサニタイズすることのみを目的とした、利用可能な C++ (またはおそらく C) 関数/クラス/ライブラリはありますか?

C# や Web アプリケーションでよく使用される他の言語でサニタイズするためのソース コードはたくさんありますが、C++ では何も見つかりません。

利用可能な関数が見つからない場合は、独自の関数を実装しようとしますが、十分にテストされたソリューションの方がはるかに優れていると思います。

編集>私のニーズに関するいくつかの精度:

C++ アプリケーションでキーボードからテキスト入力を取得しています。次に、javascript 関数呼び出しでパラメーターとして使用する前にサニタイズする必要があります。そのJavaScriptは、ライブラリ(Navi)を介して表示するテクスチャで(Chromiumを介して)自動的にレンダリングされるロードされたhtmlページで実行されます。したがって、私が使用する JavaScript 関数は、指定されたテキストを取得し、テキストの周りに P タグを配置して、次のように div に挿入します。

text_display.innerHTML += text_to_add;

この関数であれ、別の関数であれ、Web ページに送信する前にテキストをサニタイズする必要があります。Chromiumに入力する前にサニタイズする必要があります。

4

5 に答える 5

6

HTML Tidyは c で書かれていますが、実質的にすべての言語/プラットフォーム ( c++ を含む)のバインディングがあります。

于 2009-04-19T00:29:11.653 に答える
1

libxml2xmlEncodeSpecialCharsを使用できます。

于 2009-04-24T02:17:59.637 に答える
1

あなたはここでかなりの質問をしています。良い答えを得る前に、入力から何を「解析」したいのかを明確にする必要があります。たとえば、「<」文字を探して別の文字に変換すると、HTML パーサーによって解析されなくなります。

または、< と > の後に </ > パターンが続くパターンを検索することもできます。(スペースがありません。HTML パーサー HERE がそれを食べないように、ここに入れなければなりませんでした)。次に、「< single element tags / >」も探す必要があります。

実際に有効な/既知の HTML タグを探して、それらを取り除くことができます。

では、問題は、どの方法があなたのソリューションに適しているかということです。単純なパーサーを作成すると、大なり記号と小なり記号を含む有効なテキストを実際に切り取ることができることを知っています。

だから、これがこれまでのあなたへの私の答えです。

HTML 風のスタイルのテキストを単純に削除したい場合は、正規表現エンジン (PCRE) を使用し、それを使用して入力を解析し、一致したすべての文字列を削除することをお勧めします。これはおそらく簡単な解決策ですが、PCRE を入手してビルドする必要があり、プロジェクトのために知っておく必要がある GPL の問題があります。解析はおそらく実装が非常に簡単で、すばやく実行できます。

2 番目のオプションは、バッファをウォークし、開いている HTML 文字 (<) を探し、最初の空白に到達するまで解析し、次にウォークを開始し、HTML の終了文字 (>) を探してから、再びウォークを開始することです。 、解析した内容に基づいて、一致する CLOSING タグを探します。(例えば、これは DIV タグで、/DIV を探したいとします。)

私は STL HTML パーサーでこれを行うコードを持っていますが、この方法にも検討すべき問題がたくさんあります。たとえば、処理するエンティティ コード、IMG、P、BR などの単一要素タグがあります。

非常に優れた C コードを確認したい場合は、ClamAV プロジェクトを参照してください。それらには、ページからすべてのタグを取り除き、残ったテキストだけを残す HTML パーサーがあります。(とりわけ、それは..)。ファイル libclamav\htmlnorm.c を参照して、「バッファ ウォーキング」と解析の優れた例を確認してください。これは世界で最も速いものではありませんが、動作します... 最新の Clam は、HTML パーサーに非常に多くの要素が関連付けられている可能性があり、実際には理解するのが難しい場合があります。もしそうなら、戻って.88.4などの以前のバージョンを見てください。これらの古いコード ベースのバグに注意してください。良いものもあります。:)

お役に立てれば。

于 2009-04-24T19:07:11.007 に答える
0

Qt の QWebkit を使用して、HTML ツリーを解析します。次に、出力を吐き出します。これにより、HTMLが少しクリーンアップされます。

于 2009-04-29T13:07:06.710 に答える
-1

これは数時間前に投稿されたものです。これは正規表現に関する単なる記事ですが、たまたまあなたが望むものを正確に含んでいます:)そして、これも興味深いかもしれないと思います.

于 2009-04-19T00:32:54.920 に答える