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.UrlEncode
codiert den Speicherplatz als +
und nicht %20
, daher ist diese Antwort völlig falsch.
UrlEncode
da Leerzeichen durch Leerzeichen ersetzt werden +
(anstelle %20
dessen das OP ausdrücklich darum gebeten hat), was kein Standard-URI-Schema ist. decodeURI
und decodeURIComponent
in JavaScript wird dies nicht richtig dekodiert. Verwendung, Uri.EscapeDataString
die 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.EscapeDataString
oder 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 src
Attribut eines HTML- A
Tags eingefügt oder mit curl
einem 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).