URL-Codierung in C#

Bilal Shahid 12 Oktober 2023
  1. Verwenden Sie einfaches ASCII, um Zeichen in C# zu kodieren
  2. Verschiedene URL-Encoding-Optionen in C#
  3. Andere Codierungsfunktionen, die in System.Web in C# vorhanden sind
  4. Verwenden Sie Uri.HexEscape(), um einzelne Zeichen in einem String in C# zu ändern
  5. Verwenden Sie Temboo, um die URL in C# zu codieren
  6. Abschluss
URL-Codierung in C#

In diesem Artikel wird erläutert, wie eine URL in C# codiert wird.

Verwenden Sie einfaches ASCII, um Zeichen in C# zu kodieren

Es repräsentiert den DEZIMAL-Wert jedes Zeichens auf der Tastatur. Daher kann dieser DEZIMAL-Wert für eines der Zeichen in einer Zeichenfolge ersetzt und dann effizient codiert werden.

using System;

class Program {
  static void Main(string[] args) {
    string s = "DelftStack";
    string ascii_convert = "";
    foreach (char c in s) {
      ascii_convert += System.Convert.ToInt32(c);
    }
    Console.WriteLine("The converted ascii string is: " + ascii_convert);
  }
}

Beachten Sie, dass System.Convert.ToInt32() dazu neigt, die DECIMAL-Darstellung eines Zeichens in einer Zeichenfolge darzustellen. Sobald das Zeichen konvertiert ist, wird sein Wert an die neue Zeichenfolge ASCII_CONVERT angehängt, die nun die codierte Zeichenfolge darstellt.

Anstatt DEZIMAL zu verwenden, können Sie sogar BINÄR, OKTAL oder HEXADEZIMAL für Ihre Codierungsanforderungen auswählen.

Verschiedene URL-Encoding-Optionen in C#

In C# können wir eine Vielzahl von Codierungsfunktionen verwenden. Viele wandeln Zeichen in verschiedene Schreibweisen um, wie z. B. URL, URI, HEX usw.

Lassen Sie uns weitermachen und eine Funktion schreiben, um eine einfache URL in diese verschiedenen Notationen umzuwandeln.

Fügen Sie zuerst den Namensraum System.Web zu unserer Codedatei hinzu. Rufen Sie dann die Funktion auf, um die Zeichenfolge in das URL-Format zu codieren, das das /, ., " in der Zeichenfolge in ihre ASCII (hexadezimal)-Darstellung umwandelt.

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine(HttpUtility.UrlEncode("https://www.google.com"));
  }
}

Ausgang:

https%3a%2f%2fwww.google.com

Oft führt eine solche Darstellung zu Problemen bei der Erkennung durch andere Systeme. Es wird empfohlen, darauf zu achten, nur nicht so wichtige Informationen zu codieren.

Im obigen Beispiel möchten wir, dass Google immer zugänglich ist. Eine Darstellung in einem anderen Format kann diese jedoch ungültig und unkenntlich machen.

Daher ist es notwendig, die Codierung auf Begriffe aufzurufen, die zur URL gehören, aber benutzerspezifisch sind. Nehmen wir nun an, ich suche bei Google nach Welt.

Die URL würde werden:

https://www.google.com/search?q=World

Das q steht hier für Query. Verwenden Sie den folgenden Code, um ihn zu codieren.

Beispielcode:

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("https://www.google.com/search" + HttpUtility.UrlEncode("?q=World"));
  }
}

Ausgang:

https://www.google.com/search%3fq%3dWorld

Andere Codierungsfunktionen, die in System.Web in C# vorhanden sind

Beispielcode:

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("URL ENCODE UNICODE: " +
                      HttpUtility.UrlEncodeUnicode("https://www.google.com/search?q=World"));
    Console.WriteLine("URL PATH ENCODE: " +
                      HttpUtility.UrlPathEncode("https://www.google.com/search?q=World"));
    Console.WriteLine("URI ESCAPE DATASTRING: " +
                      Uri.EscapeDataString("https://www.google.com/search?q=World"));
    Console.WriteLine("URL ESCAPE URI STRING: " +
                      Uri.EscapeUriString("https://www.google.com/search?q=World"));
    Console.WriteLine("HTML ENCODE: " +
                      HttpUtility.HtmlEncode("https://www.google.com/search?q=World"));
    Console.WriteLine("HTML ATTRIBUTE ENCODE: " +
                      HttpUtility.HtmlAttributeEncode("https://www.google.com/search?q=World"));
  }
}

Ausgang:

URL ENCODE UNICODE: https%3a%2f%2fwww.google.com%2fsearch%3fq%3dWorld
URL PATH ENCODE: https://www.google.com/search?q=World
URI ESCAPE DATASTRING: https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3DWorld
URL ESCAPE URI STRING: https://www.google.com/search?q=World
HTML ENCODE: https://www.google.com/search?q=World
HTML ATTRIBUTE ENCODE: https://www.google.com/search?q=World

Beachten Sie, dass HttpUtility.UrlPathEncode(), Uri.EscapeUriString(), HttpUtility.HtmlEncode() und HttpUtility.HtmlAttributeEncode() tendenziell die gleichen Ergebnisse liefern wie die uncodierte Zeichenfolge.

Verwenden Sie Uri.HexEscape(), um einzelne Zeichen in einem String in C# zu ändern

Lassen Sie uns eine Funktion erstellen, um Zeichen in einer URL-Zeichenfolge in C# nach dem Zufallsprinzip zu ändern und dann die codierte Zeichenfolge zurückzugeben.

static string encoded_url(string param) {
  Random rd = new Random();
  int rand_num = rd.Next(0, param.Length - 1);
  param = param.Remove(rand_num, 1);
  param = param.Insert(rand_num, Uri.HexEscape(param[rand_num]));

  return param;
}

Rufen Sie die in der Hauptsache wie folgt auf.

Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 1: " +
                  encoded_url("https://www.google.com/search?q=World"));
Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 2: " +
                  encoded_url("https://www.google.com/search?q=World"));
Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 3: " +
                  encoded_url("https://www.google.com/search?q=World"));

Vollständiger Quellcode:

using System;
using System.Web;

class Program {
  static string encoded_url(string param) {
    Random rd = new Random();
    int rand_num = rd.Next(0, param.Length - 1);
    param = param.Remove(rand_num, 1);  /// returning the
    param = param.Insert(rand_num, Uri.HexEscape(param[rand_num]));

    return param;
  }

  static void Main(string[] args) {
    // string s = Console.ReadLine();
    // string ascii_convert = "";
    // foreach (char c in s)
    //{
    //     ascii_convert += System.Convert.ToInt32(c);
    // }
    // Console.WriteLine("The converted ascii string is: " + ascii_convert);
    // Console.ReadKey();

    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 1: " +
                      encoded_url("https://www.google.com/search?q=World"));
    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 2: " +
                      encoded_url("https://www.google.com/search?q=World"));
    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 3: " +
                      encoded_url("https://www.google.com/search?q=World"));
  }
}

Ausgang:

URI HEX ESCAPE for 'GOOGLE', called at 1: https://www.%6Foogle.com/search?q=World
URI HEX ESCAPE for 'GOOGLE', called at 2: https://www.go%67gle.com/search?q=World
URI HEX ESCAPE for 'GOOGLE', called at 3: https://www.google%63com/search?q=World

Sehen Sie, wie Zeichen an zufälligen Positionen in ihre HEX-Darstellungen umgewandelt werden. Sie können diese URI.HexEscape()-Funktion auch in einer Schleife verwenden, um den gesamten String oder die gewünschten Zeichen zu ändern.

URLENCODE bleibt am besten für die Browserkompatibilität und -nutzung. Um die Verwendung von URI und HTTPUTILITY zu verdeutlichen, denken Sie außerdem daran, dass URI von der SYSTEM-Klasse geerbt wird, die bereits im Client-C#-Code vorhanden ist.

Wenn Sie nicht SYSTEM.WEB verwenden, verwenden Sie besser URI und rufen dann die Verschlüsselungsfunktionen auf.

Die Verwendung von SYSTEM.WEB als Namensraum sollte jedoch in vielen Fällen keine Probleme bereiten. Falls Ihr Projekt in .NET FRAMEWORK CLIENT PROFILE kompiliert ist, können Sie nicht viel tun, außer die Codedateien in ein neues Projekt zu kopieren.

Das .NET FRAMEWORK CLIENT PROFILE kann SYSTEM.WEB. Bei der Benennung von SYSTEM.WEB muss das einfache .NET FRAMEWORK 4 verwendet werden.

Verwenden Sie Temboo, um die URL in C# zu codieren

Eine API namens TEMBOO neigt dazu, eine URL perfekt zu codieren.

Beispielcode:

// the NAMESPACES TO USE BEFORE UTILIZING THEIR CODE
using Temboo.Core;
using Temboo.Library.Utilities.Encoding;

TembooSession session = new TembooSession("ACCOUNT_NAME", "APP_NAME", "APP_KEY");

URLEncode urlEncodeChoreo = new URLEncode(session);

urlEncodeChoreo.setText("https://www.google.com/search?q=");

URLEncodeResultSet urlEncodeResults = urlEncodeChoreo.execute();

Console.WriteLine(urlEncodeResults.URLEncodedText);

Abschluss

Stellen Sie beim Codieren sicher, dass unzulässige Zeichen konvertiert werden. Wenn Sie dies nicht tun, wechseln Sie zur ersten Lösung und erstellen Sie eine gemischte Funktion, die mithilfe von SWITCH-Fällen bestimmt, welche Teile codiert werden und welche nicht.

Am Ende ist die Codierung Sache des Benutzers. Eine Funktion, die illegale Zeichen und ASCII-Zeichen umschalten könnte, würde einen ähnlichen Decoder am anderen Ende benötigen.

Daher ist es am besten, es in einem System mit einem globalen Encoder/Decoder für URL/Strings zu verwenden.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub