在HTML中呈现string并保留空格和换行符
我有一个MVC3应用程序,有一个详细信息页面。 作为一部分,我有一个描述(从数据库检索),有空格和新行。 当它被渲染时,新的行和空格被html忽略。 我想编码这些空格和新行,以便不被忽略。
你是怎样做的?
我尝试了HTML.Encode,但它最终显示的编码(甚至不是在空格和新行,但在其他一些特殊字符)
只需用white-space: pre-wrap;
devise内容white-space: pre-wrap;
。
工作小提琴
你有没有尝试过使用<pre>
标签。
您可能希望将所有空格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(" ", " ").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;"