用<p>段和<br />标记替换换行符

Pic*_*els 10 .net html c# string newline

所以我知道如何在C#代码中替换换行符.但是替换<br />标签的换行并不总是非常正确.

所以我想知道其他人使用什么样的策略?我猜的正确方法是使用<p>标签和<br />标签.

以下是我想得到的结果的一些例子.

如果没有换行符,我希望文本包含在<p>标签中.

此文本不包含换行符

<p>This text contains no newlines</p>   
Run Code Online (Sandbox Code Playgroud)

如果文本包含换行符,我希望将其替换为<br />标记并包含在<p>标记中.

此文本包含
1个换行符

<p>This text contains<br /> 1 newline.</p>
Run Code Online (Sandbox Code Playgroud)

如果有"双重换行符",我希望将该块包装在<p>标签中.

这是一个末尾带有"双重换行符"的文本.

这是一个最后没有换行的文本.

<p>This a text with 'double newlines at the end.</p>
<p>This is a text with no newline at the end.</p>
Run Code Online (Sandbox Code Playgroud)

我可以写更多的例子/组合,但我想我的意思有点清楚.

提前致谢.

Mar*_*ers 20

这是一种只使用简单的字符串替换就可以做到的方法:

    string result = "<p>" + text
        .Replace(Environment.NewLine + Environment.NewLine, "</p><p>")
        .Replace(Environment.NewLine, "<br />")
        .Replace("</p><p>", "</p>" + Environment.NewLine + "<p>") + "</p>";
Run Code Online (Sandbox Code Playgroud)

请注意,您的文本必须首先进行HTML转义,否则您可能会面临跨站点脚本攻击的风险.(注意:即使使用<pre>标签仍然存在跨站点脚本风险).


max*_*olk 5

您可以放下它并使用CSS正确渲染中断.这是一个复杂的例子,它是<pre>的一种"漂亮"替代品,但你使用的是<p>:

<p style ="padding:1em; line-height:1.1em; font-family:monospace; white-space:pre; overflow:auto; background-color:rgb(240,255,240); border:thin solid rgb(255,220,255); ">

文字在这里.

</ p>

  • 你不应该总是使用<p>代替<br />.这大多是正确的,但并非总是如此. (4认同)
  • 我想大多数人都想使用白色空间:预包装; 属性.它包装你的行,但仍然将文本显示为段落. (3认同)
  • +1:您应该始终使用<p>而不是<br /> (2认同)