如何将具有换行符的SQL值转换为HTML中的正确段落<p>?

TMC*_*TMC 3 sql sql-server asp.net

我有一个从SQL返回的文本可能有新行.但是,由于我将值放在<p></p>标签之间,因此忽略了换行符.

例如,如果SQL中的文本实际上是这样(行之间有CRLF):

foobar car
carbar foo
Run Code Online (Sandbox Code Playgroud)

HTML代码变为:

<p>foobar car
carbar foo</p>
Run Code Online (Sandbox Code Playgroud)

这只是呈现为:

foobar car carbar foo
Run Code Online (Sandbox Code Playgroud)

最终似乎我想要检测换行符然后添加适当的HTML,例如:

<p>foobar car</p><p>carbar foo</p>
Run Code Online (Sandbox Code Playgroud)

甚至

<p>foobar car<br/><br/>carbar foo</p>
Run Code Online (Sandbox Code Playgroud)

这应该在前端处理还是在返回数据的SQL查询中处理?它似乎应该在前端代码(在我的ASP.NET视图中)处理,但如果是这样,如何?

我注意到PHP中有一个函数来处理这种情况:nl2br(http://www.php.net/manual/en/function.nl2br.php)但不幸的是,这对我没有帮助:)

Cod*_*ian 6

执行这种逻辑通常比您的演示代码更好,然后是您的数据库或中间层.

我推荐的方法是编写一些.net代码,用<br/>标签替换cr和lf .代码本身很简单,这是一个模拟你的php nl2br函数的例子:

string nl2br(string text)
{
    return text.Replace("\r", "<br/>").Replace("\n", "<br/>");
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用REPLACE()CHAR()在SQL中执行此转换,尽管最好在表示层而不是数据库层中执行此类转换.

SQL方法将是:

SELECT REPLACE(REPLACE(myStr, char(13), '<br/>'), CHAR(10), '<br/>')
Run Code Online (Sandbox Code Playgroud)

这将用标签替换CHAR(13)CHAR(10)(cr和lf)<br/>.

第三种选择是使用标签在预先格式化的文本中呈现文本,<pre>尽管这实际上仅适用于一组狭窄的用例(例如显示StackOverflow上使用的代码)

例如

<pre>
    foobar car 
    carbar foo
</pre>
Run Code Online (Sandbox Code Playgroud)

会像这样渲染:

foobar car 
carbar foo

保持空间和新线完好无损.