Ich möchte mit C # eine Zeichenfolge in eine URL umwandeln. Es muss etwas im .NET Framework geben, das helfen sollte, oder?
Ich möchte mit C # eine Zeichenfolge in eine URL umwandeln. Es muss etwas im .NET Framework geben, das helfen sollte, oder?
Antworten:
Ich glaube, Sie suchen nach HttpServerUtility.UrlEncode .
System.Web.HttpUtility.UrlEncode(string url)
EscapeUriString()entkommt &weder noch =noch ?, EscapeDataString()scheint also derjenige zu sein, der verwendet werden soll.
System.Web.HttpUtility.UrlEncodecodiert den Speicherplatz als +und nicht %20, daher ist diese Antwort völlig falsch.
UrlEncodeda Leerzeichen durch Leerzeichen ersetzt werden +(anstelle %20dessen das OP ausdrücklich darum gebeten hat), was kein Standard-URI-Schema ist. decodeURIund decodeURIComponentin JavaScript wird dies nicht richtig dekodiert. Verwendung, Uri.EscapeDataStringdie von JavaScript für eine gute Round-Trip-Verwendung von codierten Daten und URIs ordnungsgemäß dekodiert werden kann
Eine andere Möglichkeit ist die Verwendung Uri.EscapeUriString(stringToEscape).
&Zeichen.
=auch nicht ?. Es scheint Uri.EscapeDataString()der richtige Weg zu sein.
#nicht
Ich fand es nützlich System.Web.HttpUtility.UrlPathEncode(string str);
Es ersetzt Leerzeichen durch% 20 und nicht durch +.
Verwenden Sie, um Leerzeichen sowie den Rest der Sonderzeichen ordnungsgemäß zu entkommen System.Uri.EscapeDataString(string stringToEscape).
Wie in der genehmigten Story kommentiert, ersetzt die HttpServerUtility.UrlEncode- Methode Leerzeichen durch + anstelle von% 20. Verwenden Sie stattdessen eine dieser beiden Methoden: Uri.EscapeUriString () oder Uri.EscapeDataString ()
Beispielcode:
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"
Verwenden HttpServerUtility.UrlEncode
Ich musste das auch tun, fand diese Frage vor Jahren, aber der Titel und der Text der Frage stimmen nicht ganz überein, und die Verwendung von Uri.EscapeDataStringoder UrlEncode(bitte nicht verwenden!) Ist normalerweise nicht sinnvoll, es sei denn, wir sprechen über das Bestehen URLs als Parameter zu anderen URLs.
(Übergeben Sie beispielsweise eine Rückruf-URL, wenn Sie eine offene ID-Authentifizierung, Azure AD usw. durchführen.)
In der Hoffnung, dass dies eine pragmatischere Antwort auf die Frage ist: Ich möchte mit C # eine Zeichenfolge in eine URL umwandeln. Es muss etwas im .NET Framework geben, das helfen sollte, oder?
Ja - zwei Funktionen sind hilfreich, um URL-Zeichenfolgen in C # zu erstellen
String.Format zum Formatieren der URLUri.EscapeDataString zum Escapezeichen von Parametern in der URLDieser Code
String.Format("https://site/app/?q={0}&redirectUrl={1}",
Uri.EscapeDataString("search for cats"),
Uri.EscapeDataString("https://mysite/myapp/?state=from idp"))
erzeugt dieses Ergebnis
https://site/app/?q=search%20for%20cats&redirectUrl=https%3A%2F%2Fmysite%2Fmyapp
Diese können sicher kopiert und in die Adressleiste eines Browsers oder in das srcAttribut eines HTML- ATags eingefügt oder mit curleinem QR-Code usw. verwendet oder in diesen codiert werden.
"https://site/app/?q=" + encodeURIComponent("search for cats") + "&redirectUrl=" + encodeURIComponent("https://mysite/myapp/?state=from idp")was die gleiche Ausgabe erzeugt.
Der folgende Code ersetzt das sich wiederholende Leerzeichen durch ein einzelnes% 20-Zeichen.
Beispiel:
Eingabe ist:
Code by Hitesh Jain
Ausgabe:
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();
}
Aus der Dokumentation:
String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);
Dies codiert jedoch tatsächlich HTML und keine URLs. Verwenden Sie stattdessen UrlEncode (TestString) .
String.Replace(" ", "%20"). Wenn Sie eine URL erstellen, müssen Sie lediglich einen URL-Wert in eine Zeichenfolge einfügen:string url = "https://site/app/?q=cats"Wenn OP jedoch davon sprach, eine URL als GET-Parameter als Teil einer anderen URL zu übergeben, handelt es sich um etwas völlig anderes, das sich beispielsweise von etwas anderem unterscheidet , Ausgeben einer URL in ein HTML-Ankertag in ASP.NET (oder was auch immer).