2012-03-13 114 views
3

可能重复:
.net UrlEncode - lowercase problemURL编码以大写字母

我使用HttpUtility.UrlEncode方法来编码字符串我。问题是编码地方的字母是小写字母,例如:

冒号(:)变成了%3a而不是%3A。

直到我对这个字符串进行加密之前,并没有太多的问题。我想要的最终结果如下所示。

zRvo7cHxTHCyqc66cRT7AD%2BOJII%3D

如果我用大写字母我得到这个

zRvo7cHxTHCyqc66cRT7AD+OJII=

这是正确的,但如果我用小写字母(即使用以UrlEncode,而不是一个静态的字符串)我得到这个

b6qk+x9zpFaUD6GZFe7o1PnqXlM=

这显然不是ST我想要的戒指。有没有一种简单的方法来使编码的字符资本没有重新发明UrlEncoding轮?

Thnaks

+0

检查这一个,应该可以解决你的问题: http://stackoverflow.com/questions/918019/net-urlencode-lowercase-problem – Matt 2012-03-13 03:34:01

+0

是啊那是一个,解决我的问题!我可以将其标记为重复或其他内容吗? – 2012-03-13 03:37:07

+0

@James Hay:是的,您可以投票将自己的问题作为重复项目进行投票,并/或将其标记为快速关闭。我现在已经为你做了。 – BoltClock 2012-03-23 22:52:10

回答

3

当然,CAP字符串你编码之前。编码通常是基于文字字符值的单行道,所以难怪结果不同。我真的很想知道,你使用这种类型的价值是什么类型?当然,有更好的方法来处理您正在编码的数据的类型

的添加到链接重复:

public static string UpperCaseUrlEncode(this string s) 
{ 
    char[] temp = HttpUtility.UrlEncode(s).ToCharArray(); 
    for (int i = 0; i < temp.Length - 2; i++) 
    { 
     if (temp[i] == '%') 
     { 
      temp[i + 1] = char.ToUpper(temp[i + 1]); 
      temp[i + 2] = char.ToUpper(temp[i + 2]); 
     } 
    } 
    return new string(temp); 
} 

把它改成一个扩展方法允许任何字符串变量要被编码大写URL。