我有一个MVC3应用程序,有一个详细信息页面。作为其中的一部分,我有一个描述(从db检索),其中有空格和新行。当它被渲染时,新的行和空格被html忽略。我想对这些空格和新行进行编码,这样它们就不会被忽略。

你是怎么做到的?

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


当前回答

我试过留白:预包装;皮特说的技术,但如果绳子是连续的,很长,它只是跑出了容器,没有翘曲,没有太多的时间去调查。但如果你也有同样的问题,我最终使用<pre>标签和下面的css,一切都很好。

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

其他回答

我试过留白:预包装;皮特说的技术,但如果绳子是连续的,很长,它只是跑出了容器,没有翘曲,没有太多的时间去调查。但如果你也有同样的问题,我最终使用<pre>标签和下面的css,一切都很好。

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

正如你在@Developer的回答中提到的,我可能会对用户输入进行html编码。如果您担心XSS,您可能永远不需要用户以原始形式输入,因此不妨转义它(并替换空格和换行符)。

注意,在输入时转义意味着您应该使用@Html。Raw或创建一个MvcHtmlString来呈现特定的输入。

你也可以试试

System.Security.SecurityElement.Escape(userInput)

但我认为它也逃不出空间。在这种情况下,我建议使用。net

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

在用户输入时。 如果希望更深入地研究可用性,也许可以对用户的输入进行XML解析(或者使用正则表达式),以只允许预定义的一组标记。 例如,允许

<p>, <span>, <strong>

... 但是不要允许

<script> or <iframe>

只需要用空白设置内容样式:pre-wrap;。

div { 空白:pre-wrap; } < div > 这是一些文本,有一些额外的空格和 一些换行符和一些尾随空格 加上五个前导空格 为 好 测量 < / div >

有一个简单的方法。我在我的应用程序上试了试,效果很好。

只需输入:$text = $row["text"]; 回声nl2br($文本);

你试过使用<pre>标签吗?

< >之前 文本与 在预标记之间嵌入多字符换行符 会起作用 标签也可以工作 它将保留格式.. < / >之前