Frage

Wie kann ich mich über die erzeugen eine Freundliche URL in C#?Momentan habe ich einfach ersetzen Sie Leerzeichen mit einem Unterstrich, aber wie würde ich gehen über die URL ist wie Stack-Überlauf?

Für Beispiel, wie kann ich umwandeln:

Wie erstelle ich eine Freundliche URL in C#?

In

how-do-i-generate-a-friendly-url-in-C -

War es hilfreich?

Lösung

Es gibt einige Dinge, die verbessert werden könnten, Jeff Lösung, obwohl.

if (String.IsNullOrEmpty(title)) return "";

IMHO, nicht der Ort, um dies zu testen.Wenn die Funktion übergeben bekommt eine leere Zeichenfolge, ging etwas ernsthaft falsch sowieso.Wirft einen Fehler oder nicht reagiert.

// remove any leading or trailing spaces left over
… muuuch later:
// remove trailing dash, if there is one

Zweimal die Arbeit.Wenn man bedenkt, dass jede operation schafft einen ganz neuen string, das ist schlecht, auch wenn die Leistung ist nicht ein Problem.

// replace spaces with single dash
title = Regex.Replace(title, @"\s+", "-");
// if we end up with multiple dashes, collapse to single dash            
title = Regex.Replace(title, @"\-{2,}", "-");

Wieder, im Grunde zweimal die Arbeit:Erste, verwenden Sie regex ersetzen mehrere Räume auf einmal.Dann verwenden Sie regex wieder zu ersetzen, mehrere Striche auf einmal.Zwei Ausdrücke, um zu analysieren, zwei Automaten zu konstruieren, Speicher, iterate, zweimal über den string, erstellen Sie zwei Zeichenfolgen an:Alle diese Operationen können zusammengeklappt werden, um ein einziges.

Aus der Spitze von meinem Kopf, ohne die Prüfung überhaupt, wäre dies eine äquivalente Lösung:

// make it all lower case
title = title.ToLower();
// remove entities
title = Regex.Replace(title, @"&\w+;", "");
// remove anything that is not letters, numbers, dash, or space
title = Regex.Replace(title, @"[^a-z0-9\-\s]", "");
// replace spaces
title = title.Replace(' ', '-');
// collapse dashes
title = Regex.Replace(title, @"-{2,}", "-");
// trim excessive dashes at the beginning
title = title.TrimStart(new [] {'-'});
// if it's too long, clip it
if (title.Length > 80)
    title = title.Substring(0, 79);
// remove trailing dashes
title = title.TrimEnd(new [] {'-'});
return title;

Beachten Sie, dass diese Methode verwendet die string-Funktionen anstelle von regex-Funktionen und char-Funktionen anstelle von string-Funktionen, Wann immer möglich.

Andere Tipps

Hier ist, wie wir es tun.Beachten Sie, dass es wahrscheinlich mehr Rand-Bedingungen, als Sie erkennen auf den ersten Blick..

if (String.IsNullOrEmpty(title)) return "";

// remove entities
title = Regex.Replace(title, @"&\w+;", "");
// remove anything that is not letters, numbers, dash, or space
title = Regex.Replace(title, @"[^A-Za-z0-9\-\s]", "");
// remove any leading or trailing spaces left over
title = title.Trim();
// replace spaces with single dash
title = Regex.Replace(title, @"\s+", "-");
// if we end up with multiple dashes, collapse to single dash            
title = Regex.Replace(title, @"\-{2,}", "-");
// make it all lower case
title = title.ToLower();
// if it's too long, clip it
if (title.Length > 80)
    title = title.Substring(0, 79);
// remove trailing dash, if there is one
if (title.EndsWith("-"))
    title = title.Substring(0, title.Length - 1);
return title;

Dies wird Teil der Art und Weise (unter Verwendung einer whitelist von gültigen Zeichen):

new Regex("[^a-zA-Z-_]").Replace(s, "-")

Es tut, jedoch, geben Sie eine Zeichenfolge, die endet mit "--".Also vielleicht eine zweite regex zu trimmen diejenigen, die von Anfang/Ende der Zeichenfolge, und vielleicht ersetzen Sie jede interne " - " zu "-".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top