81

我想使用 C# 将字符串转换为 URL。.NET 框架中一定有一些东西可以提供帮助,对吧?

4

10 回答 10

125

另一种方法是使用 Uri.EscapeUriString(stringToEscape).

于 2009-10-04T23:27:53.863 回答
56

我相信您正在寻找HttpServerUtility.UrlEncode

System.Web.HttpUtility.UrlEncode(string url)
于 2009-10-04T22:40:37.500 回答
49

我发现有用System.Web.HttpUtility.UrlPathEncode(string str);

它将空格替换为 %20 而不是 +。

于 2010-09-01T10:53:19.100 回答
26

要正确转义空格以及其他特殊字符,请使用System.Uri.EscapeDataString(string stringToEscape).

于 2016-04-06T21:13:58.970 回答
19

正如对批准的故事所评论的那样,HttpServerUtility.UrlEncode方法将空格替换为 + 而不是 %20。请改用以下两种方法之一:Uri.EscapeUriString()Uri.EscapeDataString()

示例代码:

HttpUtility.UrlEncode("https://mywebsite.com/api/get me this file.jpg")
//Output: "https%3a%2f%2fmywebsite.com%2fapi%2fget+me+this+file.jpg"

Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg");
//Output: "https://mywebsite.com/api/get%20me%20this%20file.jpg"
Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg");
//Output: "https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%20me%20this%20file.jpg"

//When your url has a query string:
Uri.EscapeUriString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg");
//Output: "https://mywebsite.com/api/get?id=123&name=get%20me%20this%20file.jpg"
Uri.EscapeDataString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg");    
//Output: "https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg"
于 2017-12-04T09:06:25.407 回答
2

采用HttpServerUtility.UrlEncode

于 2009-10-04T22:40:59.903 回答
1

我也需要这样做,从几年前就发现了这个问题,但问题标题和文本并不完全匹配,并且使用Uri.EscapeDataStringUrlEncode(请不要使用那个!)通常没有意义,除非我们谈论通过URL 作为其他 URL 的参数。

(例如,在做 Open ID 身份验证、Azure AD 等时传递回调 URL)

希望这是对这个问题的更务实的回答:我想使用 C# 将字符串转换为 URL,.NET 框架中必须有一些东西可以提供帮助,对吧?

的 - 两个函数有助于在 C# 中创建 URL 字符串

  • String.Format用于格式化 URL
  • Uri.EscapeDataString用于转义 URL 中的任何参数

这段代码

String.Format("https://site/app/?q={0}&redirectUrl={1}", 
  Uri.EscapeDataString("search for cats"), 
  Uri.EscapeDataString("https://mysite/myapp/?state=from idp"))

产生这个结果

https://site/app/?q=search%20for%20cats&redirectUrl=https%3A%2F%2Fmysite%2Fmyapp

可以安全地复制粘贴到浏览器的地址栏,或者HTML标签的src属性,或者与 一起使用,或者编码成二维码等。Acurl

于 2017-10-05T23:28:59.693 回答
0

HttpUtility.UrlEncode 方法(字符串)

于 2009-10-04T22:43:03.000 回答
-2

下面的代码将用单个 %20 字符替换重复的空格。

例子:

输入是:

Code by Hitesh             Jain

输出:

Code%20by%20Hitesh%20Jain

代码

static void Main(string[] args)
{
    Console.WriteLine("Enter a string");
    string str = Console.ReadLine();
    string replacedStr = null;

    // This loop will repalce all repeat black space in single space
    for (int i = 0; i < str.Length - 1; i++)
    {
        if (!(Convert.ToString(str[i]) == " " &&
            Convert.ToString(str[i + 1]) == " "))
        {
            replacedStr = replacedStr + str[i];
        }
    }
    replacedStr = replacedStr + str[str.Length-1]; // Append last character
    replacedStr = replacedStr.Replace(" ", "%20");
    Console.WriteLine(replacedStr);
    Console.ReadLine();
}
于 2018-04-25T17:52:38.460 回答
-4

HttpServerUtility.HtmlEncode

从文档中:

String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);

但这实际上编码的是 HTML,而不是 URL。而是使用UrlEncode(TestString)

于 2009-10-04T22:41:32.880 回答