在HTML中呈现string并保留空格和换行符

我有一个MVC3应用程序,有一个详细信息页面。 作为一部分,我有一个描述(从数据库检索),有空格和新行。 当它被渲染时,新的行和空格被html忽略。 我想编码这些空格和新行,以便不被忽略。

你是怎样做的?

我尝试了HTML.Encode,但它最终显示的编码(甚至不是在空格和新行,但在其他一些特殊字符)

只需用white-space: pre-wrap;devise内容white-space: pre-wrap;

工作小提琴

你有没有尝试过使用<pre>标签。

http://jsfiddle.net/NweRa/

您可能希望将所有空格replace为&nbsp; (非破坏空间)和所有新行“\ n”与< (html中的换行符)。 这应该达到你正在寻找的结果。

body = body.replace('',&nbsp;)。replace('\ n','< BR>');

这种性质的东西。

正如你在@Developer的回答中提到的那样,我可能会在用户input上进行HTML编码。 如果你担心XSS,你可能永远都不需要用户input它的原始forms,所以你不妨将它转义出来(并且在你使用的时候replace空格和换行符)。

请注意,在input上转义意味着您应该使用@ Html.Raw或创build一个MvcHtmlString来呈现特定的input。

你也可以试试

 System.Security.SecurityElement.Escape(userInput) 

但我认为它也不会逃离空间。 所以在这种情况下,我build议只做一个.NET

 System.Security.SecurityElement.Escape(userInput).Replace(" ", "&nbsp;").Replace("\n", "<br>") 

在用户input。 如果您想更深入地挖掘可用性,也许可以对用户的input(或使用正则expression式)进行XMLparsing,只允许预定义的一组标记。 例如,允许

 <p>, <span>, <strong> 

…但不允许

 <script> or <iframe> 

我正在尝试white-space: pre-wrap; 技术说pete但是如果string是连续的,并且很长,它刚刚从容器中跑出来,没有任何原因的扭曲, 没有太多的时间来调查 ..但如果你也有同样的问题,我结束了使用<pre>标签和下面的CSS,一切都很好去..

 pre { font-size: inherit; color: inherit; border: initial; padding: initial; font-family: inherit; } 

您可以使用空格:预格式在格式中保留换行符。 没有必要手动插入html元素。

 .popover { white-space: pre-line; } 

或添加到您的html元素style="white-space: pre-line;"