我想使用C#将字符串制成URL。.NET框架中必须有一些应该帮助的东西,对吗?
Answers:
我相信您正在寻找HttpServerUtility.UrlEncode。
System.Web.HttpUtility.UrlEncode(string url)
EscapeUriString()
不会逃脱&
也不是=
nor ?
,因此EscapeDataString()
似乎是要使用的那个。
System.Web.HttpUtility.UrlEncode
将空间编码为+
and而不是%20
,因此此答案完全不正确。
UrlEncode
因为它用+
不是%20
标准URI方案的空格(而不是OP专门要求的空格)代替。decodeURI
并且decodeURIComponent
在JavaScript中将无法正确解码。使用Uri.EscapeDataString
它可以通过适当的JavaScript进行解码的编码数据和URI的良好往返用法
另一种方法是使用 Uri.EscapeUriString(stringToEscape)
。
&
字符。
=
,也不会?
。看来Uri.EscapeDataString()
是要走的路。
#
任何
我发现有用 System.Web.HttpUtility.UrlPathEncode(string str);
它用%20而不是+代替空格。
要正确地转义空格以及其他特殊字符,请使用System.Uri.EscapeDataString(string stringToEscape)
。
就像对已批准的故事所评论的那样,HttpServerUtility.UrlEncode方法将空格替换为+而不是%20。请改用以下两种方法之一:Uri.EscapeUriString()或Uri.EscapeDataString()
样例代码:
HttpUtility.UrlEncode("https://mywebsite.com/api/get me this file.jpg")
//"https%3a%2f%2fmywebsite.com%2fapi%2fget+me+this+file.jpg"
Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg");
//"https://mywebsite.com/api/get%20me%20this%20file.jpg"
Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg");
//"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");
//"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");
//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg"
我也需要这样做,几年前就发现了这个问题,但是问题的标题和文字并不完全匹配,除非我们谈论传递,否则使用Uri.EscapeDataString
or UrlEncode
(请不要使用那个!)通常是没有意义的URL作为其他URL的参数。
(例如,在进行开放ID身份验证,Azure AD等时传递回调URL)
希望这是对问题的更实际的回答:我想使用C#将字符串转换为URL,.NET框架中一定有一些东西应该对吧?
是的-有两个函数有助于在C#中制作URL字符串
String.Format
用于格式化URLUri.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
可以安全地将其复制并粘贴到浏览器的地址栏或src
HTMLA
标记的属性中,或与一起使用curl
,或编码为QR码等。
"https://site/app/?q=" + encodeURIComponent("search for cats") + "&redirectUrl=" + encodeURIComponent("https://mysite/myapp/?state=from idp")
会产生相同的输出。
以下代码将用单个%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();
}
从文档中:
String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);
但这实际上是编码HTML,而不是URL。而是使用UrlEncode(TestString)。
String.Replace(" ", "%20")
。如果要构建URL,则只需将URL值放在字符串中即可:string url = "https://site/app/?q=cats"
但是,如果OP谈论的是将URL作为GET参数传递为另一个URL的一部分,则这完全是另一回事,这本身与上面说的不同,将网址发送到ASP.NET(或其他任何方式)的HTML锚标记中。