c# URL查询字符串问题
本文关键字:问题 字符串 查询 URL | 更新日期: 2023-09-27 18:19:11
我有一个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
为什么字符串改变了?
字符串没有改变,但是你用两种不同的方式看它。
将3q#L3t41tGfXQDTaZMbn#w==?f
编码为URI内容的方法为3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f
。(实际上,它是3q%23L3t41tGfXQDTaZMbn%23w%3D%3D%3Ff
,但在这种情况下,接近末尾的?
没有被正确地逃逸到%3F
)。
您编写字符串的方式,期望接收转义后的字符串。
您读取字符串的方式,返回未转义的字符串。
一切都很顺利,真的。
当您需要再次写入字符串时,只需再次转义:
Service = Uri.EscapeDataString(Service1);
在你的第一个代码片段中,字符串是URL编码的
在第二个代码片段中,字符串是URL Decoded.
它们本质上是相同的字符串,只是使用/删除了编码。
例如:urlencoding #
你得到%23
进一步阅读请查看维基百科关于编码的文章。
由于HttpUtility不是WP7 Silverlight堆栈的一部分,我建议使用Uri。EscapeUriString转义未转义的URI
如果您想让字符串不受影响地通过,您可能应该对字符串进行URL编码。