2010-01-06 27 views
2

在ASP如何在ASP.NET中模拟ASP Server.URLEncode?

Server.URLEncode("+&(). -*<>/\|") 
' returns %2B%26%28%29%2E+%2D%2A%3C%3E%2F%5C%7C 

在ASP.NET

Uri.EscapeDataString("+&(). -*<>/\|") 
// returns %2B%26().%20-*%3C%3E%2F%5C%7C 

HttpUtility.UrlEncode("+&(). -*<>/\|") 
// returns %2b%26().+-*%3c%3e%2f%5c%7c 

是否有任何优雅的方式如何模仿ASP.NET老ASP的行为吗?

回答

3

您可以使用正则表达式匹配,你要转换的字符,一个lambda表达式创建的十六进制代码:

string input = @"+&(). -*<>/\|"; 
string encoded = Regex.Replace(
    HttpUtility.UrlEncode(input), 
    @"[()\.\-*]", 
    m => "%" + Convert.ToString((int)m.Captures[0].Value[0], 16) 
); 
+0

我不能打电话给Regexp优雅,但我想这是最好的我可以得到,所以我接受。谢谢。 – 2010-01-06 12:34:00

0

您可以尝试使用ASP.Net支持的Server.UrlEncode()。

+1

这是否产生不同的结果比HttpUtility.UrlEncode? – AnthonyWJones 2010-01-06 12:10:52

+1

@Anthony:不,它只是调用HttpUtility.UrlEncode。 – Guffa 2010-01-06 12:18:08