0

FreeTextBoxエディターを使用して、ユーザーが作成したHTMLを取得しています。これに伴う問題は、このエディタが「<>」を除いてHTMLエンティティの特殊文字を変換しないことです。theHTML = Server.HtmlEncode(theHTML)タグとパラメータを含むすべてのHTMLを変換し、完成しない行のリストを作成したくないため、を使用できませんtheHTML.Replace

HTMLエンティティに変換するために利用できる他の関数またはメソッドはありますが、タグの外部のみですか?

4

3 に答える 3

1

<タグを開始する<意味と文字通りのより小さい記号を意味する意味が混在している場合、どちらが無視する「タグ」であり、どちらがそうでないかを判断できない可能性があります。

できることは<、次のような厄介で信頼性の低い正規表現を使用して、従来の形式の開始タグまたは終了タグではない使用法を検出することだけです。

<(?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>)

それらを。に置き換えます&lt;。同様&&amp;

&(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;)

>通常はエスケープする必要はありません。)

これは、要素を構築するためのすべての可能な有効な方法を許可するわけではなく、壊れた誤ってネストされた要素、および存在しないエンティティを許可し、コメントのような非要素構築を台無しにします。正規表現はHTMLを解析できないため、カリカリの壊れたビットが追加されたHTMLは言うまでもありません。

したがって、それはほとんど絶対確実ではありません。誤ってdivを開いたままにしてページを壊さない適切なマークアップが必要な場合、最初の最善のステップは、ページをXHTMLとして解析し、整形式のXMLでない場合はエラーで拒否することです。

リテラル<がエスケープされていない出力を生成するリッチテキストエディタコンポーネントがある場合は、そのコンポーネントをそれほどひどいものに置き換えるときが来ました。しかし、一般的に、ユーザーがHTMLを作成できるようにすることはお勧めできません。なぜなら、ユーザーはHTMLを本当にごみだらけにしているからです。さらに、誰でもHTMLを入力できるようにすることで、JavaScriptを使用したサイトの破壊とそのセキュリティを完全に制御できます。多くの場合、より単純なテキストマークアップ言語が適しています。

于 2009-12-11T23:07:45.197 に答える
0

Linq to Xmlを使用して各要素を解析し、各要素と属性ノードの値をエンコードすることをお勧めします。コードを考えてみますが、金曜日の午後5時です。

于 2009-12-11T22:55:52.803 に答える
0

たくさん検索したところ、FreeTextBoxコンポーネントの間違ったプロパティを使用していることがわかりました。プロパティはConvertHtmlSymbolsToHtmlCodesであり、trueである必要があります。

また、コードをXHTMLページに挿入する必要がある場合は、FormatHtmlTagsToXhtmlを使用すると便利です。これは、タグパラメーターとそれらを囲む引用符による強力な検証を使用するためです。

于 2009-12-23T16:44:10.677 に答える