【问题标题】:Why is C#.net removing my newline characters when I do a replace, and how can I stop it?为什么在我进行替换时 C#.net 会删除我的换行符,我该如何停止它?
【发布时间】:2011-12-15 02:21:54
【问题描述】:

我有一个 textarea 保存到我用来作为电子邮件正文发送的数据库中。

我允许将令牌用作与该消息有关的信息的占位符。

如果我根本不触摸占位符,电子邮件发送就可以了,换行​​符与文本框中的换行符完全相同(电子邮件以纯文本形式发送)。

但是,当我开始使用替换功能时,换行符开始消失,所有行都被挤在一起。

例如。

Body.Replace("%procedure%", CurrentOrder.Description);

将替换文本 %procedure%,但也会删除行尾的换行符。即使换行符不是直接在被替换的文本之后。

有什么想法吗?

编辑:

现在,我只是将“\n”替换为“<br />”并将电子邮件以 HTML 格式发送。我宁愿将其保留为纯文本,因为我根本无法控制收件人。

编辑 2: 这似乎是 Outlook 本身的问题,而不是电子邮件。我刚刚在gmail中查看了完全相同的电子邮件,格式正确。

【问题讨论】:

  • 代码中的字符串或outlook中的结果电子邮件中是否删除了换行符?
  • 你用不同的浏览器测试过这个吗? IIRC 浏览器在文本区域中添加换行符的方式不同,也许当 .NET 操作字符串时,它“修复”了它认为是“断”的换行符? .NET 对换行符的理解可通过 Environment.NewLine 访问。刚刚看到您的编辑 - 如果您要替换\n,浏览器差异会更相关。
  • @GregB 我刚刚运行了一个正则表达式来查看匹配计数,看起来数字保持不变。

标签: c# .net regex visual-studio replace


【解决方案1】:

Outlook 会删除新行,除非该行以两个空格结尾。

如果您正在测试发送到使用 Outlook 的帐户的电子邮件,请尝试在新行之前添加两个空格,看看是否可以解决问题。

【讨论】:

  • 我刚刚发现这是一个前景问题...感谢您的帮助。我会调查的。
  • 这做到了Body.Replace(Environment.NewLine, Environment.NewLine + " ");
  • 经过进一步调查,您可以在换行符之前添加一个标签,outlook不会删除它。这也使格式保持正确,而不是在每个换行符的开头添加 2 个额外的空格。
  • 您应该替换为" " + Environment.NewLine,这样该行以两个空格结尾,而不是下一行以两个空格开头。
【解决方案2】:

如果它用于 HTML,我首先将新行替换为 BR 标签:

String str = str.Replace(Environment.NewLine, "<br/>");

要么这样,要么不使用多行文本区域,而是使用 JQuery 或 AJAX HTML 编辑器或其他东西。


也许你可以换一个占位符(如上,然后换掉?)

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2011-09-25
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多