我在Web应用程序中有一个字符串 字符串是这样的:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
编码后(通过使用Server.Encode())显示以下内容:
`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:"<>?|
这是正确的
但是,当我使用Response.Write(theSecondExample)
时,结果如下:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
缺少反斜杠!
输出怎么可能不是我的预期?我该如何预防?
答案 0 :(得分:5)
没有错误 - 您正在验证调试器中的字符串,它会自动转义字符串 - 例如"Hello \ Goodbye"
将在调试器中显示为"Hello \\ Goodbye"
。
也就是说,调试器的行为会有所不同,具体取决于您查看字符串的方式(当然还有C#/ VB):
更新
好的,所以我更进一步,激发VS2010,请创建一个测试项目并跟进。
[TestMethod]
public void TestMethod1()
{
string a = @"`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:""<>?|";
Console.WriteLine("Original:");
Console.WriteLine("{0}", a);
string htmlEncoded = System.Web.HttpUtility.HtmlEncode(a);
Console.WriteLine("Html Encoded:");
Console.WriteLine("{0}", htmlEncoded);
}
(显然我最初使用了一个逐字字符串,以避免除了双引号之外的任何转义)。
测试的控制台输出是:
Original:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Html Encoded:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
同样,如果断点测试结束并开始与可视化工具混淆:
悬停(a
):
"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:\"<>?|"
即。它在工具提示中被C#转义并被引号括起来。
悬停(htmlEncoded
):
"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:"<>?|"
..再次,它是html编码和 C#通过引号转义
文字(htmlEncoded
):
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
..没有c#逃避
Html(htmlEncoded
):
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
当然新的罗马剧本:)
我相信我们会把我们带回原来的字符串 - 这也表明你所描述的场景不是这样的 - 除非你已经读过一个转义字符串为“正确”,而事实上它并非如此。 Html不需要转义\
。