如何回车c#字符串没有

本文关键字:字符串 回车 何回车 | 更新日期: 2023-09-27 18:16:16

这就是我的问题。

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

换句话说:

SQL server端

案例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#模拟case 1/2 ?

如何回车c#字符串没有

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。

如果以上内容不能解决问题,请继续阅读


textarea元素:

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

注意,CR和LF表示字符,而不是'后面跟着rn字符的两个字符序列——这种形式经常出现在字符串字面值中。如果它看起来像这样,那么有些东西正在做不正确的转换,并且(或留下) '放在那里。或者,也许有一些误入歧途的"添加斜杠"黑客?

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

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

使用c#的字符串替换方法将"''r''n"替换为"'r'n",这应该可以修复它。