【问题标题】:Get string from Server.UrlEncode as uppercase从 Server.UrlEncode 获取字符串为大写
【发布时间】:2020-11-26 19:18:23
【问题描述】:

我希望它的输出为大写。这就是我在Server.UrlEncode("http://") 上得到的:

http%3a%2f%2f

但我需要:

http%3A%2F%2F

C#有内置解决方案吗?


编码后的 url 应作为签名基本字符串(签名算法的输入)以创建摘要(散列)。 然后哈希会被其他系统(java,php等)验证,所以他们需要先通过签名重建来重新创建哈希。

【问题讨论】:

标签: c# encoding urlencode


【解决方案1】:

这会将字符串中的所有转义字符大写

string url = "http://whatever.com/something";
string lower = Server.UrlEncode(url);
Regex reg = new Regex(@"%[a-f0-9]{2}");
string upper = reg.Replace(lower, m => m.Value.ToUpperInvariant());

【讨论】:

  • 那是它的agent-j,但没有额外的“)”,谢谢!
  • 感谢您。由于某种原因,Twitter 的 OAuth 要求转义字符为大写,否则它会给你 401 未授权
  • 谢谢! (顺便说一句,这对于 OAuth 来说是必要的原因是整个 URL(“http://”和所有)都是 URLEncoded 然后签名的。OAuth 1.0 规范要求编码字符的大写十六进制,但 .net UrlEncode 产生小写 -差异导致签名不匹配。)
  • @SAGExSDX:我将创建 oauth_signature 所需的 url 大写。但它仍然给我 401 错误。如果你有 C# 代码,可以分享给我吗?
  • @user1457039 var lower = HttpUtility.UrlEncode(strText); var reg = new Regex(@"%[a-f0-9]{2}");返回 reg.Replace(lower, m => m.Value.ToUpperInvariant());和上面的答案一样。
【解决方案2】:
Uri.EscapeDataString("http://")

此代码返回

http%3A%2F%2F

【讨论】:

  • 我的最爱。既然可以使用,为什么还要使用正则表达式?
  • 这是正确答案:如果您使用过 HttpUtility.UrlEncode('http://');对其进行编码会错误地返回小写编码字母,我错误地将其用于 Oauth http 请求中的签名。
  • 这不会转义方括号:[]
【解决方案3】:

这很简单

Regex.Replace( encodedString, @"%[a-f\d]{2}", m => m.Value.ToUpper() )

即将所有十六进制字母数字组合替换为大写

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,我在这个链接中找到了答案:

    WebUtility.UrlEncode or HttpUtility.UrlEncode

    简而言之,您可以使用:

    System.Net.WebUtility.UrlEncode
    

    编码成大写的十六进制值

    【讨论】:

      【解决方案5】:

      假设“http”始终是前四个字符,那么您只需在“http”、UrlEncode 那部分之后拆分字符串,然后在其上调用ToUpper()。然后以“http”作为前缀重新加入。

      【讨论】:

        猜你喜欢
        • 2021-09-12
        • 1970-01-01
        • 2022-01-20
        • 2011-11-30
        • 2023-02-03
        • 2011-10-06
        • 2021-09-10
        • 1970-01-01
        • 2021-04-14
        相关资源
        最近更新 更多