【问题标题】:How to carriage return C# string without \r\n?如何在没有 \r\n 的情况下回车 C# 字符串?
【发布时间】:2013-06-01 17:12:16
【问题描述】:

这是我的问题。

用户可以在浏览器的文本区域中输入文本。然后通过电子邮件发送给用户。 我想知道的是如何处理回车?如果我输入 \r\n 进行回车,则电子邮件(这是纯文本电子邮件)中包含实际的 \r\n。

换句话说:

在 SQL 服务器端

案例 1: 如果我在发送电子邮件之前这样做 (注意第 1 行后的换行符)

update emails
set
body='line 1
line 2'
where
id=100

电子邮件正确发送

案例 2:

 update emails
 set
 body='line 1'+char(13) + char(10) +'line 2'
 where
 id=100

此电子邮件也正确发送出去

案例 3: 但是,如果我这样做

update emails
set
body='line 1 \r\n line 2',
where
id=100

电子邮件中将包含实际文本 \r\n。

如何通过 c# 模拟案例 1/2?

【问题讨论】:

  • 你到底为什么要使用 UrlDecode?你在解码 URL 吗?
  • 当你说“用回车替换 \r\n”时,你把我弄糊涂了。回车时,生成\r\n。
  • 正如其他人所说,您期望得到什么结果? \n 和/或 \r 是回车符。
  • 您能更好地解释您在电子邮件中看到的内容吗?你真的看到文字\r\n吗?如果是这样,则问题与 UrlDecode 无关。
  • 为什么需要删除%20?您是通过GET 而不是POST 发送表单数据吗?

标签: c# asp.net


【解决方案1】:

SQL 文字(至少在 SQL Server 中)支持这样的转义序列(尽管您可以在字符串文字中按回车键,使其跨越多行)。如果需要将其写入 as SQL 字符串,请参阅this answer 了解一些替代方案。

如果从 C# 以编程方式运行 SQL,请使用 parameters,它可以很好地处理这个问题:

sqlCommand.CommandText = "update emails set body=@body where id=@id"
sqlCommand.Parameters.AddWithValue("@body", "line 1 \r\n line2");

注意字符串文字的处理(以及\r\n字符转义序列的转换)发生在C#中(带有 CR 和 LF 字符)被传递给 SQL。

如果以上没有解决问题,请继续阅读。


4.10.13 The textarea element:

由于历史原因,元素的值以三种不同的方式归一化,用于三种不同的目的。原始值是最初设置的值。它没有标准化。 API 值是 value IDL 属性中使用的值。它被规范化,以便换行符使用“LF”(U+000A)字符。最后是表单提交值。 [提交表单时 textarea] 被规范化,因此换行符使用 U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) 字符对,此外,如果需要,给定元素的 wrap 属性,附加插入换行符以在给定宽度处换行。

请注意,CR 和 LF 表示 字符,而不是 \ 后跟 rn 字符的两个字符序列 - 这种形式经常出现在 字符串文字。如果它显示为这样,那么某些东西正在执行不正确的转换并(或离开\ 放在那里。或者,也许某处有一些被误导的“添加斜线”黑客?

正如所指出的,虽然 URL 解码可能是错误的,但它不会直接进行这种转换。但是,如果转换发生在之前在“URL 编码”之前,那么它将(正确)解码为(不正确的)值。

在任何一种情况下,它都是一个错误。所以找出在哪里引入了不正确的数据转换并修复它(附加调试器和/或监控网络流量以获取线索) - 隔离帖子中根本不存在的位置所需的信息。

【讨论】:

    【解决方案2】:

    使用任何 c# 的字符串替换方法将 "\\r\\n" 替换为 "\r\n" 并且应该可以解决它。

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2020-07-26
      • 2021-03-14
      • 2020-09-13
      • 1970-01-01
      相关资源
      最近更新 更多