提问人:Dan dot net 提问时间:2/29/2012 最后编辑:BergiDan dot net 更新时间:4/10/2023 访问量:260071
在 HTML 中呈现字符串并保留空格和换行符
Render a string in HTML and preserve spaces and linebreaks
问:
我有一个具有详细信息页面的 MVC3 应用。作为其中的一部分,我有一个包含空格和换行符的描述(从数据库中检索)。当它被渲染时,html 会忽略新的行和空格。我想对这些空格和换行符进行编码,以便它们不会被忽略。
你是怎么做到的?
我尝试了HTML。编码,但它最终显示编码(甚至不是在空格和换行符上,而是在其他一些特殊字符上)
答:
您可能希望将所有空格替换为(不间断空格),并将所有新行替换为(html中的换行符)。这应该达到您正在寻找的结果。
\n
<br>
body = body.replace(' ', ' ').replace('\n', '<br>');
这种性质的东西。
评论
您是否尝试过使用标签。<pre>
<pre>
Text with
multipel line breaks embeded between pre tag
will work and
also tabs..will work
it will preserve the formatting..
</pre>
评论
只需使用空格设置内容样式: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;
如果您不希望每个段落的第一行缩进。
abcd
br
标签,否则你需要改变你的渲染方法,以免在两个 div 之间发出任何空格(即<div class="highlight due_regard">
<div class="highlight due_regard"> \n<div class="line-1">
form
<div class="highlight due_regard"><div class="line-1">
)
正如您在@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>
我正在尝试皮特所说的技术,但如果绳子是连续的而且很长,它就会从容器中跑出来,并且由于某种原因没有翘曲,没有太多时间进行调查。但是,如果您也遇到同样的问题,我最终使用了标签和以下css,一切都很好。white-space: pre-wrap;
<pre>
pre {
font-size: inherit;
color: inherit;
border: initial;
padding: initial;
font-family: inherit;
}
您可以使用 white-space: pre-line 在格式中保留换行符。无需手动插入 html 元素。
.popover {
white-space: pre-line;
}
或添加到您的 HTML 元素style="white-space: pre-line;"
不要使用 div 标签,而是在 div 标签中使用 p 标签,这样可以保留换行符。
但是,如果您必须使用 ,您可以从以下代码中获得灵感:
<script>
$( document ).ready(function() {
var str = $("body").html();
var regex = /[\n]/g;
$("body").html(str.replace(regex, "<br>"));
});
</script>
评论