将 <br> 解析为纯文本新段落

Posted

技术标签:

【中文标题】将 <br> 解析为纯文本新段落【英文标题】:Parse <br> to plain text new paragraph 【发布时间】:2010-11-05 16:48:00 【问题描述】:

我目前正在从内部数据库的字段中删除 html 标记。除了将 标签转换为纯文本换行符之外,一切都很顺利。

我想转换这个:

The victory halted Spain&rsquo;s 35-game unbeaten streak, handing the Spanish their first defeat since November 2006. The Americans now advance to the final Sunday to face the winner of Thursday&rsquo;s semifinal between South Africa and Brazil, the five-time World Cup winner. Brazil defeated the Americans, 3-0, in their earlier meeting in this tournament.<br>
<br>
In the final, though, the United States will be without midfielder Michael Bradley, who received a red card for a harsh tackle in the 87th minute, the third such ejection for the Americans in this tournament. It was the only careless blemish on an otherwise nearly perfect evening.

到这里:

The victory halted Spain’s 35-game unbeaten streak, handing the Spanish their first defeat since November 2006. The Americans now advance to the final Sunday to face the winner of Thursday’s semifinal between South Africa and Brazil, the five-time World Cup winner. Brazil defeated the Americans, 3-0, in their earlier meeting in this tournament.

In the final, though, the United States will be without midfielder Michael Bradley, who received a red card for a harsh tackle in the 87th minute, the third such ejection for the Americans in this tournament. It was the only careless blemish on an otherwise nearly perfect evening.

我正在使用以下代码行将 更改为换行符:

value = value.Replace("<br>", Environment.NewLine).Trim();

运行该代码后,这是保存在我的数据库中的内容:

The victory halted Spain's 35-game unbeaten streak, handing the Spanish their first defeat since November 2006. The Americans now advance to the final Sunday to face the winner of Thursday's semifinal between South Africa and Brazil, the five-time World Cup winner. Brazil defeated the Americans, 3-0, in their earlier meeting in this tournament.    In the final, though, the United States will be without midfielder Michael Bradley, who received a red card for a harsh tackle in the 87th minute, the third such ejection for the Americans in this tournament. It was the only careless blemish on an otherwise nearly perfect evening.

如果我将已解析的文本保存到我的数据库并将其粘贴到记事本或 Word 中,我只会得到一个段落而不是两个段落。

这是处理这个问题的正确方法吗?我使用的数据库是 SQL Server 2005。

【问题讨论】:

我无法回答您的问题,但我必须赞扬您对您所问问题的解释和记录的能力。这么多 n00bs 会在第一段之后停止...... 如果您在将行保存到数据库之前对其进行调试和中断,您是否会在字符串中看到 2 个新行标记? 谢谢。我在更改前后进行了调试和中断。当我在代码运行以删除 后查看调试器中的文本时,它看起来应该有两个段落。在该行之后,值被保存。然后我运行查询从数据库中提取值并将其粘贴到 Word 2003 但我只看到一个段落。 如果您实际上是从 Microsoft SQL 工具获取此信息,请尝试使用 Ctrl+T 进行文本输出(相对于网格)——这样应该可以正确显示换行符。 【参考方案1】:

您使用Environment.Newline的方法是正确的。我认为问题在于如何直接在 SQL Server 中返回一些查询,假设您直接从 SQL Server Management Studio(或类似的)复制/粘贴。

我有 99% 的把握认为,如果您使用 SqlConnection 提取数据,然后将其输出到 winform、文本文件等……那么您将得到您正在寻找的换行符。

抱歉,我不记得为什么当您直接从 SQL Server 的结果网格中复制/粘贴时会发生这种情况。

【讨论】:

【参考方案2】:

根据您的后续评论(当您调试它时),听起来正确的值至少被正确发送到数据库。

可能不是这么简单,但值得检查...当您说“运行查询以提取值...并将其粘贴到 Word”时,您使用什么来进行查询?因为我知道如果您在默认的“结果到网格”视图中使用 SQL Server 2005 Management Studio 查询某些内容,它不会正确呈现新行(我认为它只是用空格替换它们)...如果您将其切换为“结果到文本”(或者您在代码中从数据库中获取值并调试返回的值),您将获得实际值的更准确表示,并显示新行...

【讨论】:

【参考方案3】:

我很好奇您是如何检索“已保存”值的。您是从 SQL Server Management Studio 中复制它,还是实际执行 SELECT 语句?有时,在 SQL Server 2005 工具中显示信息的数据网格不会“准确地”显示字符串数据,因为它存储在数据库中。如果您实际上没有执行 SELECT 语句,我会尝试这样做,并确保您没有遇到 UI 怪癖。

【讨论】:

感谢大家的帮助。我正在使用 SQl Management Studio 来获取价值。然后我组装了一个简单的 WinForm 应用程序来获取代码并将其显示到文本框中。它确实显示正确,并带有适当的分节符。 啊!邪恶的 SQL Management Studio 怪癖再次来袭! (那个人咬了我很多次,我都数不清了……)【参考方案4】:

您是否尝试过用实际的换行符替换?即

value = value.Replace("<br>", "\r\n").Trim();

Granted Environment.NewLine 应该做同样的事情,但值得一试。

【讨论】:

以上是关于将 <br> 解析为纯文本新段落的主要内容,如果未能解决你的问题,请参考以下文章

将 HTML 代码转换为纯文本,格式可用于文本文件 [重复]

JS - 如何在 <br> 处分割文本并放入 2 个 <p> 中

HTML 在 dojo 小部件中显示为纯文本

分组元素

使用 Python 将 HTML 渲染为纯文本

HTML文本标签