怎么实现百度的那种url编码呀?
如果我在百度里面搜 ray() , 它会编码成 ray%28%29,
我这里用C# 的 HttpUtility.UrlEncode(); 结果还是得到 ray(),
请问怎么才能编码成向百度这样。
[解决办法]
System.Web.HttpUtility.UrlEncode("要编码的字符串", System.Text.UnicodeEncoding.GetEncoding("GB2312")).ToUpper()
[解决办法]
( %28
) %29
是Url编码,你怎么得到的结果,使用Request是经过解码了的。
[解决办法]
参考
[解决办法]
Asp.Net是利用Server下的UrlEncode方法与UrlDncode方法来对Url进行编解码的。
- C# code
Server.UrlEncode(string s)--对s进行Url编码:Server.UrlDncode(string s)--对s进行Url解码:
[解决办法]
参考
[解决办法]
我觉得百度的这种编码方式是自己写的,LZ完全可以自己实现
我这里有个是最所以字符都进行编码的,LZ参考下
- C# code
//编码 public static string Encode(this string str) { string codeword = ""; byte[] by = Encoding.Default.GetBytes(str); foreach (byte b in by) { codeword = codeword + "%" + b.ToString("X"); } return codeword; }//解码 public static string Decode(this string str) { string[] strlist = str.Split(new string[] { "%" }, StringSplitOptions.RemoveEmptyEntries); byte[] by = new byte[strlist.Length]; for (int i = 0; i < strlist.Length; i++) { string temp = strlist[i]; int inttemp = ToInt(AnyToTen(temp, 16)); if (inttemp > 0) by[i] = byte.Parse(inttemp.ToString()); else return ""; } return Encoding.Default.GetString(by); }
[解决办法]
额..不好意思,ToInt是转换成整数的方法,AnyToTen(temp, 16)是16进制转换成10进制的,LZ可以用其他方法代替
[解决办法]
- C# code
private static long Test(string hexStr) { char[] charList = hexStr.ToCharArray(); long result = 0; for (int i = 0; i < charList.Length; i++) { result += HexChar2Dec(charList[charList.Length - 1 - i]) * Power(16, i); } return result; }
[解决办法]
public static string Escape(string str)
{
StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
sb.Append((Char.IsLetterOrDigit(c) || c == '-' || c == '_' || c == ' ' || c == '/' || c == '.') ? c.ToString() : Uri.HexEscape(c));
}
return sb.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Escape("ray()"));
}
或者直接引用Microsoft.JScript.dll
Microsoft.JScript.GlobalObject.escape("ray()")
[解决办法]
学习啦,谢谢大家