我有一个WP7项目,我正在使用下面的代码。它通常工作正常,但我得到一个奇怪的结果,一些特定的字符串被传递。
Service = "3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f"
NavigationService.Navigate(new Uri("/Details.xaml?service=" + Service, UriKind.Relative));
下一页:
NavigationContext.QueryString.TryGetValue("service", out Service1);
Service1 now = 3q #L3t41tGfXQDTaZMbn#w ==?f
为什么要更改字符串?
答案 0 :(得分:2)
在您的第一个代码段中,字符串是URL编码。
在第二个代码段中,字符串是URL Decoded。
它们本质上是相同的字符串,只是应用/删除了编码。
例如:urlencoding #
获得%23
如需进一步阅读,请查看此wikipedia article on encoding。
由于HttpUtility不是WP7 Silverlight堆栈的一部分,我建议使用Uri.EscapeUriString来转义任何尚未转义的URI。
答案 1 :(得分:2)
如果你希望它能够通过未受损害的传递,你应该对字符串进行URL编码。
答案 2 :(得分:2)
字符串没有改变,但你以两种不同的方式看待它。
将3q#L3t41tGfXQDTaZMbn#w==?f
编码为URI内容的方式为3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f
。 (实际上,它是3q%23L3t41tGfXQDTaZMbn%23w%3D%3D%3Ff
,但是在这种情况下,你在接近末尾的?
没有被正确地转义为%3F
。)
您编写字符串的方式,希望能够将其转义。
你读取字符串的方法,将其返回未转义。
事情真的非常完美。
当你需要再次写字符串时,再次将其转义:
Service = Uri.EscapeDataString(Service1);