2010-04-16 49 views
4

我有一個文本區域,我想將用戶輸入的文本存儲在數據庫中,格式如段落中斷,編號列表。我正在使用HTMLencode和HTMLdecode。HTMLencode HTMLdecode

樣品我的代碼是這樣的:

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

如果與2段用戶輸入的文本,STR1顯示字符\ r \ n \ r \ n段落之間。但是當它將它寫入屏幕時,只需在第一段中添加第二段。當我解碼它時,爲什麼不打印2段?

回答

0

HTML不會將\ r \ n識別爲換行符。將它們轉換爲「p」或「br」標籤。

2

這不是HtmlEncodeHtmlDecode做的。差遠了。

這些方法用於「轉義」HTML。 <變成&lt;,>變成&gt;等等。您可以使用這些來逃避用戶輸入的輸入,以避免跨站點腳本攻擊和相關問題。

如果您希望能夠將純文本輸入並將其轉換爲HTML,請考慮使用Markdown(我相信Stack Overflow使用MarkdownSharp)的格式化工具。

如果您想要的只是換行符,您可以使用text.Replace("\r\n", "<br/>"),但處理更復雜的結構(如有序列表)很困難,並且已有現有工具來處理它。

+0

我想格式化文本區域中的所有類型的HTML輸入,如換行符,編號列表等等,無論用戶輸入什麼內容,就像現在正在文本區域中寫入(在堆棧溢出中)一樣,它將在屏幕上打印爲I正在進入。 Aaronaught建議我可以使用Markdown。但是.net框架中是否有任何內置功能可以實現此功能?感謝所有回答這個問題的人。 – elenor 2010-04-17 21:57:49

+0

@elenor:不,這種類型的東西絕對沒有內置到.NET Framework中。這就是爲什麼像MarkdownSharp這樣的項目存在。 – Aaronaught 2010-04-17 22:00:22

+0

謝謝Aaronaught – elenor 2010-04-17 22:08:23

12

簡單的解決辦法是要做到:

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

這是假設你只關心獲得正確的<br />標籤的地方。如果你想要一個真正的格式化器,你需要一個像Aaronaught建議的庫。

+0

很簡單,但我喜歡它, – Dan 2011-01-14 12:24:04