我在url中编码参数并设置标签的href,如下所示:
href="javascript:var win=window.open('LayerPreview.aspx?tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG%2b8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A%3d%3d','','width=800,height=600,resizable=no','true');"
但是当单击链接时,在PagePoad of LayerPreview.aspx中,查询字符串已被修改,即原始:
tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG%2b8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A%3d%3d'
变为:
tLNUMCswKSXpnGpQy1rWev26c5euEUa97eqiZYdDpMvDcKNbi6Z05Q3WC5DhG+8HJFGHAo%2fHiSFrtEEsHiConkpaT2aJ2WV0Hxxqo2l1bmkNdAotVVvI%2fT4JtE%2fc3dJ8MEAhM3NJZ15qk3fkW87q9A=%3d
这显然会破坏我的解码。
有什么想法吗?
谢谢,
卡尔。
编辑:我已经在使用System.Web.HttpUtility.UrlEncode和System.Web.HttpUtility.Decode。
这是操作:
在阅读查询字符串时,我恰恰相反:
这适用于我的网络应用中的其他任何地方,但在分配window.open网址或任何其他javascript方法的链接时无效。
答案 0 :(得分:4)
使用 Uri.EscapeDataString 和 Uri.UnescapeDataString 而不是Uri.EscapeUriString(URLEscape与EscapeUriString相同)。
urlencode和urldecode用于网址。 urlencode将空格转换为+并单独留下“/”,因为它假定这些是url中的有效字符(它们是)。 urldecode执行相反的操作,将+转换为空格。 urldecode不希望看到+被转换。我想它也不希望有效的URL中包含“==”。通常它是由“&”分隔的一堆“x = y”。 “=”连续两次没有意义,所以它只转换了一个。
但你不希望+转换为空格并返回,你想要%2b或其他什么。您没有转义URL,而是转义将在URL中的数据字符串。在.NET中使用Uri.EscapeDataString和Uri.UnescapeDataString。
(你的“加密”输出0-9 az AZ + /,总共有64个不同的字符,最后是==。所以我们不要把它称为“加密”,而不是base64。原始数据是二进制的,所以我猜这就是加密数据。)
http://codeidol.com/csharp/csharpckbk2/Web/Escaping-and-Unescaping-Data-for-the-Web/
答案 1 :(得分:3)
你的字符串包含一些将被转义的字符,我相信这就是你发生的事情。我想您可能需要使用URLEncode
和URLDecode
。您可以在javascript或服务器端执行此操作,具体取决于您如何使用该长字符串(加密文本?)。
答案 2 :(得分:0)
您的原始查询参数包含许多百分号符号。我的猜测是再次解释这些(连同以下2或3个字符,搜索谷歌搜索URL编码)。如果情况确实如此,看看你是否可以以某种方式逃避%号,或“编码”它们。
答案 3 :(得分:0)
我遇到了同样的问题。当我们在window.open
属性中使用href
打开窗口时会出现此问题。
如果您尝试从javascript调用相同的window.open
,则不会发生同样的问题。
解决此问题的方法是在使用href window.open
内的attribute
函数之前解码您的网址两次。
请按照以下步骤
生成纯文本查询字符串。
加密查询字符串。
通过System.Web.HttpUtility.UrlEncode
运行。
再次通过System.Web.HttpUtility.UrlEncode
运行。