2010-04-16 32 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