作者:yzh148448 | 2023-06-06 21:25
我有一个接受输入的textarea控件.我想稍后通过简单地使用以下方法将该文本呈现为视图:
@ Model.CommentText
这适当地编码任何值.但是,我想用换行换字符,
我找不到一种方法来确保新的br标签不被编码.我尝试过使用HtmlString,但还没有运气.
1> Jacob Krall..:
使用CSS空白属性而不是打开自己的XSS漏洞!
@Model.CommentText
实际上`white-space:pre-wrap;`更好,因为`pre-line`会通过将空格分组到一个空格来弄乱你的文本.
@Jacob Krall - 我登录后只给你一个+1.神奇的小技巧.
不知道这个.绝对比我的答案更好.
http://www.quirksmode.org/css/whitespace.html对'pre-line`有一个很好的解释(我只知道`nowrap`和`pre`).
不幸的是,这几乎不适用于任何电子邮件客户端(包括Office 2013).
这很棒.我不确定`
`是否真的是好的标记.我认为这取决于具体情况.如果你把
放在那里来修复布局,那就糟糕了.有时,换行符实际上是内容的一部分,就像在诗中一样.但即便如此:在*content*中添加换行符,而不是标记中的`
`,并使用`white-space:pre-line`.
@ChtiwiMalek:我当然同意你通常想要保留所有的空格,但最初的问题是关于将换行符转换成`
`s
这种方法的一个警告是,由于浏览器错误,新行将在复制粘贴时丢失.请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=1174452和https://code.google.com/p/chromium/issues/detail?id=317365
2> Omar..:
请尝试以下方法:
@MvcHtmlString.Create(Model.CommentText.Replace(Environment.NewLine, "
"))
更新:
根据marcind's
有关评论此相关的问题时,ASP.NET MVC团队正在实施类似的东西<%:
,并<%=
为Razor视图引擎.
更新2:
我们可以将有关HTML编码的任何问题转化为有害用户输入的讨论,但已经存在足够的内容.
无论如何,要注意潜在的有害用户输入.
@MvcHtmlString.Create(Html.Encode(Model.CommentText).Replace(Environment.NewLine, "
"))
更新3(Asp.Net MVC 3):
@Html.Raw(Html.Encode(Model.CommentText).Replace("\n", "
"))
对于MVC 3的发布版本,建议似乎是@ Html.Raw(Html.Encode(Model.CommentText).Replace(Environment.NewLine,"
")),而不是使用MvcHtmlString.至少用于展示.
我的上帝啊,不.如果我决定对某些`