62

通常我只会使用:

HttpContext.Current.Server.UrlEncode("url");

但由于这是一个控制台应用程序,HttpContext.Current所以总是null.

还有另一种方法可以做同样的事情吗?

4

12 回答 12

80

试试这个!

Uri.EscapeUriString(url);

或者

Uri.EscapeDataString(data)

无需引用 System.Web。

编辑:有关更多信息,请参阅另一个SO 答案...

于 2012-01-19T18:41:57.590 回答
71

我不是 .NET 人,但是,你不能使用:

HttpUtility.UrlEncode Method (String)

此处描述:

MSDN 上的 HttpUtility.UrlEncode 方法(字符串)

于 2008-08-18T14:51:06.503 回答
13

来自 Ian Hopkins 的代码无需添加对 System.Web 的引用即可为我解决问题。对于不使用 VB.NET 的人来说,这里是 C# 的一个端口:

/// <summary>
/// URL encoding class.  Note: use at your own risk.
/// Written by: Ian Hopkins (http://www.lucidhelix.com)
/// Date: 2008-Dec-23
/// (Ported to C# by t3rse (http://www.t3rse.com))
/// </summary>
public class UrlHelper
{
    public static string Encode(string str) {
        var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"));
        return Regex.Replace(str, 
            String.Format("[^{0}]", charClass),
            new MatchEvaluator(EncodeEvaluator));
    }

    public static string EncodeEvaluator(Match match)
    {
        return (match.Value == " ")?"+" : String.Format("%{0:X2}", Convert.ToInt32(match.Value[0]));
    }

    public static string DecodeEvaluator(Match match) {
        return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString();
    }

    public static string Decode(string str) 
    {
        return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator));
    }
}
于 2010-10-24T01:25:40.773 回答
6

你会想要使用

System.Web.HttpUtility.urlencode("url")

确保将 system.web 作为项目中的引用之一。我不认为它默认包含在控制台应用程序中作为参考。

于 2008-08-18T14:53:21.990 回答
6

WebUtility.UrlEncode(string)System.Net命名空间使用

于 2016-01-29T20:08:46.363 回答
4

尝试在 HttpUtility 类中使​​用 UrlEncode 方法。

  1. http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx
于 2008-08-18T14:50:38.127 回答
3

我自己遇到了这个问题,我没有将 System.Web 程序集添加到我的项目中,而是编写了一个用于编码/解码 URL 的类(它非常简单,我已经做了一些测试,但不是很多)。我在下面包含了源代码。请:如果你重用这个,请在​​顶部留下评论,如果它坏了不要怪我,从代码中学习。

''' <summary>
''' URL encoding class.  Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
    Public Shared Function Encode(ByVal str As String) As String
        Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
        Dim pattern = String.Format("[^{0}]", charClass)
        Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator)

        ' replace the encoded characters
        Return Regex.Replace(str, pattern, evaluator)
    End Function

    Private Shared Function EncodeEvaluator(ByVal match As Match) As String
    ' Replace the " "s with "+"s
        If (match.Value = " ") Then
            Return "+"
        End If
        Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
    End Function

    Public Shared Function Decode(ByVal str As String) As String
        Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator)

        ' Replace the "+"s with " "s
        str = str.Replace("+"c, " "c)

        ' Replace the encoded characters
        Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator)
    End Function

    Private Shared Function DecodeEvaluator(ByVal match As Match) As String
        Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
    End Function
End Class
于 2008-12-24T02:43:34.920 回答
2

Kibbee 提供了真正的答案。是的,HttpUtility.UrlEncode 是正确的使用方法,但默认情况下它不适用于控制台应用程序。您必须添加对 System.Web 的引用。要做到这一点,

  1. 在您的解决方案资源管理器中,右键单击引用
  2. 选择“添加参考”
  3. 在“添加引用”对话框中,使用 .NET 选项卡
  4. 向下滚动到 System.Web,选择它,然后点击确定

现在您可以使用 UrlEncode 方法。你还想补充,

使用 System.Web

在控制台应用程序的顶部或在调用方法时使用完整的命名空间,

System.Web.HttpUtility.UrlEncode(someString)

于 2009-03-16T15:08:21.527 回答
1

System.Web 中的 HttpUtility.UrlEncode("url")。

于 2008-08-18T14:51:37.173 回答
1

使用静态 HttpUtility.UrlEncode 方法。

于 2008-08-18T14:52:08.640 回答
0

最好的办法是添加对 System.web..dll 的引用

并使用 var EncodedUrl=System.Web.HttpUtility.UrlEncode("URL_TEXT");

您可以在System.web.dll中找到该文件

于 2016-08-02T06:16:19.097 回答
0

Uri.EscapeUriString 不应用于转义要在 URL 中传递的字符串,因为它不会像您预期的那样对所有字符进行编码。'+' 是一个很好的例子,它没有被转义。然后将其转换为 URL 中的空格,因为这就是简单 URI 中的含义。显然,当您尝试在 URL 中传递诸如 base 64 编码字符串之类的内容时,这会导致大量问题,并且空格会出现在接收端的整个字符串中。

您可以使用 HttpUtility.UrlEncode 并将所需的引用添加到您的项目中(如果您正在与 Web 应用程序通信,那么我认为您没有理由不这样做)。

或者在 Uri.EscapeUriString 上使用 Uri.EscapeDataString ,这里解释得很好:https ://stackoverflow.com/a/34189188/7391

于 2018-02-15T11:09:39.540 回答