0

这是我的问题。

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

换句话说:

在 SQL server 端

案例 1:如果我在发送电子邮件之前执行此操作(请注意第 1 行之后的换行符)

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

电子邮件正确发出

案例二:

 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?

4

2 回答 2

7

SQL 文字(至少 SQL Server 中的文字)支持此类转义序列(尽管您可以在字符串文字中按 Enter 键,使其跨越多行)。如果需要将其编写为SQL 字符串,请参阅此答案以获取一些替代方案。

如果从 C# 以编程方式运行 SQL,请使用可以很好地处理此问题的参数:

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 文本区域元素

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

请注意,CR 和 LF 表示字符,而不是两个字符序列\后跟rorn字符 - 这种形式通常在字符串文字中找到。如果它看起来如此,那么某些东西正在做不正确的转换并将(或离开\那里。或者,也许某处有一些被误导的“添加斜线”黑客?

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

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

于 2013-05-31T23:37:36.757 回答
2

使用任何 c# 的字符串替换方法来替换"\\r\\n"并且"\r\n"应该修复它。

于 2013-05-31T23:26:50.953 回答