Newlines在C#/ ASP.NET 1.1代码中意外地逃脱了

时间:2008-12-18 03:02:03

标签: c# asp.net

有人可以向我解释为什么我的代码:

string messageBody = "abc\n" + stringFromDatabaseProcedure;

其中valueFromDatabaseProcedure不是从

输入的SQL数据库中的值
'line1\nline2'

产生字符串:

"abc\nline1\\nline2"

这导致我有点挠头。

我正在使用ASP.NET 1.1。

澄清,

我正在创建字符串,我需要在表单提交的电子邮件正文中。 我提到了ASP.NET 1.1,因为我在控制台应用程序中使用.NET 2.0没有得到相同的结果。

我正在做的就是添加字符串,当我查看messageBody字符串时,我可以看到它已经转义了值字符串。

更新 什么对我没有帮助的是Outlook没有正确显示文本电子邮件中的\ n(除非你回复它)。 在线邮件查看器(甚至是Exchange Webmail)将\ n显示为新行。

5 个答案:

答案 0 :(得分:1)

我刚刚对测试NorthwindDb进行了快速测试,并在中间输入了一些\ n的垃圾数据。然后,我使用直接的ADO.NET查询数据,你知道吗,事实上它确实为你自动地避开了反斜杠。它与n无关,它只是看到反斜杠并为你逃脱它。事实上,我也把它放到db:foo“栏中,当它回到C#时它就是foo \”吧,它也为我逃脱了。我的观点是,它试图像SQL一样保留数据,因此它正在逃避它认为需要逃脱的东西。我还没有找到关闭它的设置,但如果我这样做,我会告诉你......

答案 1 :(得分:0)

ASP.NET会使用<br />来制作换行符。 \n可用于控制台应用程序或Windows窗体应用程序。您是否将其输出到网页?

方法#1

string value = "line1<br />line2";
string messageBody = "abc<br />" + value;

如果不起作用,请尝试:

string value = "line1<br>line2";
string messageBody = "abc<br>" + value;

方法#2

使用System.Environment.NewLine

 string value = "line1"+ System.Environment.NewLine + "line2";
 string messageBody = "abc" System.Environment.NewLine + value;

其中一种方法可以保证有效。如果您要将字符串输出到网页(或电子邮件或表单提交),则 使用我提到的方式之一。 \n永远不会在那里工作。

答案 2 :(得分:0)

您需要设置一个监视,并查看数据库结果字符串在何处被双重转义。

将两个字符串一起添加将永远不会使转义字符串加倍,因此它要么在此之前发生,要么在此之后发生。

答案 3 :(得分:0)

当我从数据库中获取字符串时,.NET会自动转义它。但是,小@符号被附加到字符串,我没有注意到。

所以它出现是非逃避到我的“即将去度假”的目标。

因此,当未转义的\ n被添加到字符串中时(因为整个字符串不再被转义),它将删除@并显示字符串转义的数据库部分。

加,这完全是一种错觉。

也许这个假期已经过期了。

感谢您的意见。

答案 4 :(得分:0)

如果存储在数据库中的实际字符串是(为了强调而添加的空格):“我是1 \ n l 2 n”,那么存储它的任何内容都可能存在错误。但假设那是确切的字符串,那么“abc \ nline1 \ nline2”字符串就是当你在一个调试器中查看将打印为“abc
line1 \ nline2”的字符串时会发生的事情。是一种方便,允许您直接复制粘贴到调试器中而没有错误)。

简短的回答:.NET没有转义字符串,你的调试器是。将文字“\ n”写入数据库的代码有一个错误。