2009-07-24 13 views
2

Ich muss alle Zeichen entfernen, die nicht Teil von URLs sein können, wie Leerzeichen, <,> und usw.Wie formatiert man eine Zeichenfolge als Teil der URL?

Ich bekomme die Daten aus der Datenbank.
Zum Beispiel, wenn die abgerufenen Daten: Produkt # Nummer 123!

die neue Zeichenfolge sollte sein: Produkt-Nummer-123

Soll ich Regex verwenden? Gibt es dafür ein Regex-Muster? Dank

+1

ich es nehmen wollen Sie ein SEO-freundliche string; keine datenerhaltende (uri-masked) Zeichenkette? –

+0

ja, so etwas :) –

Antwort

1

Eine einfache regex dies zu tun ist:

string cleaned = Regex.Replace(url, @"[^a-zA-Z0-9]+","-"); 
+1

Ja, das ist ziemlich einfach, vielleicht folgen Sie es mit einem Ersatz von aufeinanderfolgenden "-". Aus der Spitze meines Kopfes etwas wie: 'gereinigt = Regex.Replace (gereinigt, @" - + "," ");' sollte den Trick tun. –

+0

Bearbeitete die Antwort, um meinen Vorschlag zu enthalten, als es ausgecheckt wurde. Hoffe, dass Sie nichts dagegen haben :) –

+0

Ich hätte nichts dagegen, wenn Ihre Bearbeitung korrekt ist, aber es ist nicht. Mein ursprünglicher Regex-Ersatz erzeugt niemals aufeinanderfolgende Bindestriche. –

2

Hier ist ein ein Beispiel dafür, wie eine URL freundliche Saite aus einer „normalen“ Zeichenfolge zu generieren:

public static string GenerateSlug(string phrase) 
{ 
    string str = phrase.ToLower(); 

    str = Regex.Replace(str, @"[^a-z0-9\s-]", ""); // invalid chars  
    str = Regex.Replace(str, @"\s+", " ").Trim(); // convert multiple spaces into one space 
    str = str.Substring(0, str.Length <= 45 ? str.Length : 45).Trim(); // cut and trim it 
    str = Regex.Replace(str, @"\s", "-"); // hyphens 

    return str; 
} 

Sie können den Trimm-Teil zu entfernen, wenn Sie sicher sind, dass Sie immer möchte die vollständige Zeichenfolge.

Source

+3

Vielleicht lohnt sich ein Ersatz für mehrere Bindestriche auch am Ende der oben genannten oder Sie können am Ende mit ---- Name ---- ist Typ URLs. –

+0

Ist das ein Problem in anderen Strings als Strings, die bereits Bindestriche haben? "my- --name-is" – Espo

+0

Dies scheint ein sehr kompliziertes Stück Code zu sein, um etwas zu erreichen, was mit einem einzelnen Regex-Replace erledigt werden kann. –

1

Um nur den Ersatz von Sonderzeichen führen wie „<“ Sie Server.UrlEncode(string s) verwenden können. Und Sie können das Gegenteil mit Server.UrlDecode(string s) tun.

+0

Sieht so aus, als ob er nach einer menschlich lesbaren (alias SEO) freundlichen URL sucht, anstatt nach einer, die alle zusätzlichen Zeichen enthält. Obwohl das funktionieren würde, wäre es nicht so gut lesbar. –

+0

Das ist ein fairer Punkt. Ich habe diesen Teil der Frage offensichtlich übersehen. –

Verwandte Themen