这是我的问题.
用户可以在浏览器的文本区域中输入文本.然后通过电子邮件发送给用户.我想知道的是我如何处理回车?如果我输入\ r \n进行回车,则电子邮件(纯文本电子邮件)中包含实际的\ r \n.
换一种说法:
在SQL服务器端
案例1:如果我在发送电子邮件之前执行此操作(请注意第1行之后的换行符)
update emails
set
body='line 1
line 2'
where
id=100
Run Code Online (Sandbox Code Playgroud)
电子邮件正确发出
案例2:
update emails
set
body='line 1'+char(13) + char(10) +'line 2'
where
id=100
Run Code Online (Sandbox Code Playgroud)
这封电子邮件也正确发布
案例3:但是,如果我这样做
update emails
set
body='line 1 \r\n line 2',
where
id=100
Run Code Online (Sandbox Code Playgroud)
电子邮件中会有实际的文本\ r \n.
如何通过c#模拟案例1/2?
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");
Run Code Online (Sandbox Code Playgroud)
需要注意的是的处理字符串文字(的和转换\r和\n字符转义序列)在C#发生和值(以CR和LF 的字符)被传递到SQL.
如果上述问题没有解决问题,请继续阅读.
由于历史原因,元素的值以三种不同的方式归一化,用于三种不同的目的.原始值是最初设置的值.它没有正常化.API值是值IDL属性中使用的值.它被规范化,以便换行使用"LF"(U + 000A)字符.最后,还有表单提交值.[在表单提交时,textarea]被规范化,以便换行使用U + 000D CARRIAGE RETURN U + 000A LINE FEED(CRLF)字符对,此外,如果需要给定元素的换行属性,则插入额外的换行符以包装给定宽度的文本.
请注意,CR和LF表示字符,而不是两个字符序列,\后跟r或n字符 - 这种形式通常在字符串文字中找到.如果出现这种情况,那么某些东西正在进行错误的转换并放置(或离开)\那里.或者,也许在某处有一些被误导的"添加斜线"黑客攻击?
正如所指出的,虽然URL解码可能是错误的,但它不会直接进行此转换.但是,如果发生转换以前是"URL编码"之前,那么它将(正确)解码为(不正确)的值.
在任何一种情况下,这都是一个错误.因此,找出其中引入不正确的数据转换和修复它(附加一个调试器和/或监视线索网络流量) -所需要的信息隔离,其中根本不存在在后.
| 归档时间: |
|
| 查看次数: |
8298 次 |
| 最近记录: |