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

为什么字符串改变了?

c# URL查询字符串问题

字符串没有改变,但是你用两种不同的方式看它。

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编码。