我有一个文本区域,我想将用户输入的文本存储在数据库中,其格式如段落,编号列表。我正在使用HTMLencode和HTMLdecode。
我的代码示例如下:
string str1 = Server.HtmlEncode(TextBox1.Text);
Response.Write(Server.HtmlDecode(str1));
如果用户输入带有2个段落的文本,则str1在段落之间显示字符\ r \ n \ r \ n。但是当它将它写入屏幕时,只需在第1段附加第2段。当我解码时,为什么不打印2段?
答案 0 :(得分:12)
简单的解决方案是:
string str1 = Server.HtmlEncode(TextBox1.Text).Replace("\r\n", "<br />");
这假设您只关心获得正确的<br />
标记。如果你想要一个真正的格式化程序,你需要一个像Aaronaught建议的库。
答案 1 :(得分:2)
这不是HtmlEncode
和HtmlDecode
所做的。甚至没有关闭。
这些方法用于“转义”HTML。 <
变为<
,>
变为>
,依此类推。您可以使用这些来逃避用户输入的输入,以避免跨站点脚本攻击和相关问题。
如果您希望能够进行纯文本输入并将其转换为HTML,请考虑使用Markdown之类的格式化工具(我相信Stack Overflow使用MarkdownSharp)。
如果您想要的只是换行符,则可以使用text.Replace("\r\n", "<br/>")
,但处理更复杂的结构(如有序列表)很困难,并且已有现有工具可以处理它。
答案 2 :(得分:0)
HTML无法将\ r \ n识别为换行符。将它们转换为“p”或“br”标签。