Answers:
只需使用设置样式white-space: pre-wrap;
。
div {
white-space: pre-wrap;
}
<div>
This is some text with some extra spacing and a
few newlines along with some trailing spaces
and five leading spaces thrown in
for good
measure
</div>
white-space: pre-line;
如果您不想缩进每个段落的第一行。
您可能要用&nbsp;
(不间断空格)替换所有空格,并\n
用<<b></b>br>
(HTML中的换行符)替换所有新行。这样可以达到您想要的结果。
body = body.replace(' ', &nbsp;).replace('\n', '<<b></b>br>');
这种性质的东西。
我正在尝试white-space: pre-wrap;
pete所说的技术,但是如果字符串是连续的并且很长一段时间,它刚从容器中用完了,并且由于任何原因都没有翘曲,那么就没有太多时间来研究 ..但是如果您也有同样的问题,我最终使用了<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(" ", " ").Replace("\n", "<br>")
根据用户输入。而且,如果您想更深入地研究可用性,则可以对用户输入进行XML解析(或使用正则表达式),以仅允许使用一组预定义的标签。例如,允许
<p>, <span>, <strong>
...但是不允许
<script> or <iframe>