Jan*_*Jan 2 c# encoding response.write c#-4.0
我在Web应用程序中有一个字符串字符串是这样的:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)
编码后(通过使用Server.Encode()),它显示以下内容:
`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)
哪个是对的
但是,当我使用Response.Write(theSecondExample)结果时是这样的:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)
反斜杠丢失了!
怎么可能输出不符合我的预期?我该怎样预防呢?
没有错误 - 您正在验证调试器中的字符串,它会自动转义字符串 - 例如,"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);
}
Run Code Online (Sandbox Code Playgroud)
(显然我最初使用了一个逐字字符串,以避免除了双引号之外的任何转义).
控制台输出的测试是:
Original:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Html Encoded:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)
同样,如果您断点测试结束并开始与可视化工具混淆:
悬停(a):
"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:\"<>?|"
Run Code Online (Sandbox Code Playgroud)
即它在工具提示中被C#转义并被引号括起来.
悬停(htmlEncoded):
"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:"<>?|"
Run Code Online (Sandbox Code Playgroud)
..再次,它是html编码和 C#转义与引号
文字(htmlEncoded):
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)
..没有c#逃避
Html(htmlEncoded):
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Run Code Online (Sandbox Code Playgroud)
在Times New Roman剧本当然:)
我相信我们会把我们带回原来的字符串 - 这也表明你所描述的场景不是这样的 - 除非你已经读过一个转义字符串为"正确",而事实上它并非如此.Html不需要\转义.