Question

Je suis en train de traduire la méthode slugify suivante de PHP en C #: http://snipplr.com/view/22741/slugify-a- chaîne en php /

Edit: Par souci de commodité, voici le code de ci-dessus:

/**
 * Modifies a string to remove al non ASCII characters and spaces.
 */
static public function slugify($text)
{
    // replace non letter or digits by -
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text);

    // trim
    $text = trim($text, '-');

    // transliterate
    if (function_exists('iconv'))
    {
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    }

    // lowercase
    $text = strtolower($text);

    // remove unwanted characters
    $text = preg_replace('~[^-\w]+~', '', $text);

    if (empty($text))
    {
        return 'n-a';
    }

    return $text;
}

Je suis pas probleming coder le reste, sauf que je ne trouve pas le C # équivalent de la ligne suivante de code PHP:

$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

Edit: But est de traduire des caractères non-ASCII tels que Reformáció Genfi Emlékműve Előtt dans reformacio-genfi-emlekmuve-elott

Était-ce utile?

La solution

Je voudrais également ajouter que la //TRANSLIT supprime les apostrophes et que la solution de @jxac ne répond pas. Je ne sais pas pourquoi, mais d'abord l'encoder à cyrillique, puis vous obtenez ASCII un comportement similaire à //TRANSLIT.

var str = "éåäöíØ";
var noApostrophes = Encoding.ASCII.GetString(Encoding.GetEncoding("Cyrillic").GetBytes(str)); 

=> "eaaoiO"

Autres conseils

Il y a une bibliothèque .NET pour la translittération sur CodePlex - unidecode . Il fait généralement le tour en utilisant des tables Unidecode de python portés.

conversion en chaîne:

byte[] unicodeBytes = Encoding.Unicode.GetBytes(str);
byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes);
string asciiString = Encoding.ASCII.GetString(asciiBytes);

conversion en octets:

byte[] ascii = Encoding.ASCII.GetBytes(str);

@Thomas Levesque est à droite, vous obtiendrez encodée par le flux de sortie ...

pour supprimer les diacritiques (marques d'accent), vous pouvez utiliser la fonction String.Normalize, comme indiqué ici:

http://www.siao2.com/2007/05/14 /2629747.aspx

qui devrait prendre en charge la plupart des cas (où le glyphe est vraiment un caractère plus un accent). pour une mise en correspondance char encore plus agressif (pour prendre en charge des cas comme les pays scandinaves de href="http://en.wikipedia.org/wiki/%C3%98" tailladé o [Ø], digraphs et autres exotiques) glyphes, il y a l'approche de la table:

http://www.codeproject.com/KB/cs/UnicodeNormalization.aspx

comprend environ 1000 correspondances de symboles, en plus de la normalisation.

(notez, la ponctuation est supprimé par le remplacement regex dans votre exemple)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top