【问题标题】:UrlEncode - Javascript vs. C# [duplicate]UrlEncode - Javascript 与 C# [重复]
【发布时间】:2009-02-05 05:19:34
【问题描述】:

我有一个需要一些参数的 URL。这些参数的值可以是重音字符,所以我绝对需要对它们进行 UrlEncode。奇怪的是,我发现行为或 Javascript 与 .NET 之间存在差异。

假设我尝试对“éléphant”一词进行 UrlEncode。在 JavaScript 中(根据本网站:http://www.albionresearch.com/misc/urlencode.php),我得到以下信息:%E9l%E9phant。这对我来说似乎是正确的。但是,在 .NET 中使用此调用 (System.Web.HttpUtility.UrlEncode("éléphant")) 我得到“%c3%a9l%c3%a9phant”。 怎么了?我错过了什么?如果我想在 .NET 中获取 %E9l%E9phant 该怎么办?

谢谢!

【问题讨论】:

  • 我刚才遇到了完全相同的问题。感谢您“为我”提出问题 - 让我很快就解决了这个问题。

标签: c# javascript encoding urlencode


【解决方案1】:

System.Web.HttpUtility.UrlEncode 将使用 UTF8(我认为..)作为其默认编码器,您可以通过指定一个来更改它..

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.Default); // %e9l%e9phant

虽然最好指定一个实际的代码页或其他什么,而不是依赖于操作系统默认值。

【讨论】:

    【解决方案2】:

    在 JavaScript 中(根据本网站:http://www.albionresearch.com/misc/urlencode.php),我得到以下信息:%E9l%E9phant。

    那个页面是错误的。 JavaScript 也使用 UTF-8,就像 .NET 默认使用的那样。自己试试吧:

    javascript:alert(encodeURIComponent('éléphant'))
    %C3%A9l%C3%A9phant
    

    今天的网址是 UTF-8。不要再尝试使用 cp1252 了。 UTF-8 是你的朋友。相信 UTF-8!

    【讨论】:

      【解决方案3】:

      参考:

      js:       %E9 l     %E9 phant
      .net: %c3 %a9 l %c3 %a9 phant
      

      不同之处在于,一个是UTF-8 URL 编码,而另一个是ANSI URL 编码。

      在 .NET 中,尝试:

      Dim a As String = System.Web.HttpUtility.UrlEncode( _
          "éléphant", _
          Text.Encoding.Default)
      

      我明白了

          %e9 l     %e9 phant
      

      结果。这与您为 JavaScript 提供的字符串匹配,但十六进制字符大小写除外。

      【讨论】:

        【解决方案4】:

        Encoding.Default 仅适用于您系统的当前代码页设置为西欧的情况。现在,如果 Javascript 也与 .NET 编码器在同一台机器上运行,这可能很重要,但如果不是,那么您可以将代码页强制为西欧代码页:

        System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252));
        

        【讨论】:

          【解决方案5】:

          您也可以尝试对它们进行 base64 编码。

          有一个 previous post 处理在 JavaScript 中执行此操作。

          在 .NET 中,有很多例子展示了如何做到这一点。这是我 found 关闭 Google 的一个。

          当然,字符串可能比 urlencoding 大一点。但是,它们会被混淆,这可能是一个优势,具体取决于应用程序。

          【讨论】:

            猜你喜欢
            • 2013-06-16
            • 1970-01-01
            • 2016-06-23
            • 2017-01-09
            • 1970-01-01
            • 2013-12-10
            • 2011-10-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多