2 Stimmen

Bereinigung der Zeichenkette in ein url-sicheres Format

Ich versuche, eine Zeichenfolge zu bereinigen, so dass es verwendet werden kann, um in einer URL gesetzt werden. Dies ist nur für die Anzeige in der URL. Jetzt war ich mit dieser Funktion in PHP, die gut funktioniert:

$CleanString = IconV('UTF-8', 'ASCII//TRANSLIT//IGNORE', $String);
$CleanString = Preg_Replace("/[^a-zA-Z0-9\/_|+ -]/", '', $CleanString);
$CleanString = StrToLower( Trim($CleanString, '-') );
$CleanString = Preg_Replace("/[\/_|+ -]+/", $Delimiter, $CleanString);

Jetzt versuche ich, dies in C# zu setzen, die regex's sind kein Problem, aber die erste Zeile ist ein bisschen kompliziert. Was ist der sichere Weg, um Zeichen wie é á ó mit ihren normalen Äquivalenten a e o zu ersetzen?

Zum Beispiel, oben würde transer:

The cát ís running & getting away

zu

the-cat-is-running-getting-away

4voto

Mart Punkte 5258

Le site CharUnicodeInfo.GetUnicodeCategory(c) Methode kann Ihnen sagen, ob ein Zeichen ein "Non spacing mark" ist. Dies kann nur verwendet werden, wenn die Zeichenkette in einer Form vorliegt, in der Akzente ("diakritische Zeichen") von ihrem Buchstaben getrennt sind, was man mit Normalize(NormalizationForm.FormD) .

Hier ist die vollständige Methode zur Erweiterung der Zeichenkette:

using System.Text;
using System.Globalization;
...

public static string RemoveDiacritics(this string strThis)
{
    if (strThis == null)
        return null;

    var sb = new StringBuilder();

    foreach (char c in strThis.Normalize(NormalizationForm.FormD))
    {
        if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
            sb.Append(c);
    }
    return sb.ToString();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X