这是我的问题。
用户可以在浏览器的文本区域中输入文本。然后通过电子邮件发送给用户。 我想知道的是我如何处理回车?如果我输入\ 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。
如何模拟案例1/2到c#?
答案 0 :(得分:7)
SQL文字(至少是SQL Server中的那些)不支持这样的转义序列(尽管可以只是在字符串文字中输入,以便它跨越多行)。如果将作为编写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#和 value (CR和LF 字符)将传递给SQL。
如果上述问题没有解决问题,请继续阅读。
由于历史原因,元素的值以三种不同的方式归一化,用于三种不同的目的。原始值是最初设置的值。它没有正常化。 API值是值IDL属性中使用的值。它被规范化,以便换行使用“LF”(U + 000A)字符。最后,还有表单提交值。 [在表单提交时,textarea]被规范化,以便换行使用U + 000D CARRIAGE RETURN U + 000A LINE FEED(CRLF)字符对,此外,如果需要,给定元素的换行属性,附加插入换行符以包装给定宽度的文本。
请注意,CR和LF代表字符,而不是\
的双字符序列,后跟r
或n
字符 - 此表单为经常出现在字符串文字中。如果出现这种情况,那么某些内容正在进行错误的转换,而将(或离开)放在那里\
。或者,也许在某处有一些被误导的“添加斜线”黑客?
正如所指出的,虽然URL解码可能有误,但它不会直接执行此转换。但是,如果在“URL编码”之前转换发生之前,那么它将(正确地)解码为(不正确的)值。
在任何一种情况下,它都是一个错误。因此,找出引入错误数据转换的 where 并修复它(附加调试器和/或监视网络流量以寻找线索) - 隔离帖子中根本不存在的所需信息。 / p>
答案 1 :(得分:2)
使用c#的字符串替换方法将"\\r\\n"
替换为"\r\n"
,并且应该修复它。