window.open在这里出了什么问题?

时间:2009-05-07 14:30:36

标签: asp.net javascript window.open

我在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。

这是操作:

  1. 生成纯文本查询字符串。
  2. 加密查询字符串。
  3. 通过System.Web.HttpUtility.UrlEncode。
  4. 运行它

    在阅读查询字符串时,我恰恰相反:

    1. 通过System.Web.HttpUtility.UrlDecode运行它。
    2. 解密查询字符串。
    3. 阅读查询字符串。
    4. 这适用于我的网络应用中的其他任何地方,但在分配window.open网址或任何其他javascript方法的链接时无效。

4 个答案:

答案 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)

你的字符串包含一些将被转义的字符,我相信这就是你发生的事情。我想您可能需要使用URLEncodeURLDecode。您可以在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运行。