4

テキスト領域があり、ユーザーが入力したテキストを、段落区切り、番号付きリストなどの html 形式でデータベースに保存したいと考えています。これには HTMLencode と HTMLdecode を使用しています。

私のコードのサンプルは次のようなものです:

string str1 = Server.HtmlEncode(TextBox1.Text);
Response.Write(Server.HtmlDecode(str1));

ユーザーが 2 つの段落でテキストを入力した場合、str1 は段落間に文字 \r\n\r\n を表示します。ただし、画面に書き込むときは、2番目の段落を1番目に追加するだけです。デコード中に 2 つの段落が出力されないのはなぜですか?

4

3 に答える 3

12

簡単な解決策は次のとおりです。

string str1 = Server.HtmlEncode(TextBox1.Text).Replace("\r\n", "<br />");

<br />これは、適切なタグを配置することだけに関心があることを前提としています。本当のフォーマッタが必要な場合は、Aaronaught が提案したようなライブラリが必要になります。

于 2010-04-16T03:28:17.107 に答える
3

それは何をしているのではHtmlEncodeありHtmlDecodeません。程遠い。

これらのメソッドは、HTMLを「エスケープ」するためのものです。 <になる&lt;、に>なる&gt;、など。クロスサイトスクリプティング攻撃および関連する問題を回避するために、これらを使用してユーザーが入力した入力をエスケープします。

プレーンテキスト入力を取得してHTMLに変換できるようにする場合は、Markdownなどのフォーマットツールを検討してください(Stack OverflowはMarkdownSharpを使用していると思います)。

改行だけが必要な場合は、を使用できますがtext.Replace("\r\n", "<br/>")、順序付きリストなどのより複雑な構造を処理することは困難であり、それを処理するための既存のツールがすでに存在します。

于 2010-04-16T02:08:45.000 に答える
0

HTML は \r\n を改行として認識しません。それらを「p」または「br」タグに変換します。

于 2010-04-16T01:50:57.983 に答える