2009-07-24 6 views
2

Je dois supprimer tous les caractères qui ne peuvent pas faire partie des URL, comme les espaces, <,> et etc.Comment formater une chaîne pour faire partie de l'URL?

Je reçois les données de la base de données.
Par exemple si les données récupérées sont: Numéro de produit 123!

la nouvelle chaîne devrait être: Le produit numéro 123

Dois-je utiliser regex? Y a-t-il un motif regex pour ça? Merci

+1

Je suppose que vous voulez une chaîne de SEO-friendly; pas une chaîne de préservation des données (échappée par l'uri)? –

+0

oui, quelque chose comme ça :) –

Répondre

1

Un regex facile à faire est:

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

Oui, c'est assez simple, peut-être suivre avec un remplacement de "-" consécutifs. Sur le dessus de ma tête quelque chose comme: 'nettoyé = Regex.Replace (nettoyé, @" - + "," ");' devrait faire l'affaire. –

+0

Édité la réponse pour inclure ma suggestion comme elle a vérifié. J'espère que ça ne vous dérange pas :) –

+0

Cela ne me dérangerait pas si votre édition est correcte, mais ce n'est pas le cas. Mon remplacement de regex d'origine ne produit jamais de tirets consécutifs. –

2

Voici un exemple sur la façon de générer une chaîne conviviale URL à partir d'une chaîne « normale »:

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; 
} 

Vous pouvez vouloir retirer la garniture partie si vous êtes sûr que vous avez toujours veux la chaîne complète.

Source

+3

Peut-être vaut la peine de faire un remplacement pour plusieurs tirets aussi à la fin de ce qui précède ou vous pouvez vous retrouver avec mon ---- nom ---- est de type urls. –

+0

Est-ce un problème dans d'autres chaînes que les chaînes qui ont déjà des traits d'union? "my- --name- -is" – Espo

+0

Cela ressemble à un morceau de code très compliqué pour accomplir quelque chose qui peut être fait avec un seul regex remplacer. –

1

Pour seulement effectuer le remplacement des caractères spéciaux comme « < » vous pouvez utiliser Server.UrlEncode(string s). Et vous pouvez faire le contraire avec Server.UrlDecode(string s).

+0

On dirait qu'il est après une URL lisible par l'homme (aka SEO) plutôt que d'un qui inclut tous les caractères supplémentaires. Bien que cela fonctionnerait mais ne serait pas tout ce qui est lisible. –

+0

C'est un bon point. J'ai évidemment manqué cette partie de la question. –

Questions connexes