2009-08-22 3 views
3

J'utilise Url.Encode dans une vue et qu'il remplace les espaces avec + donc au lieu de:Comment dans ASP.NET MVC pour modifier la stratégie de remplacement de caractères Url.Encode?

/production/chats-la-musicale Je reçois .../chats + le + musical.

Je suis sûr que c'est facile, mais où allez-vous configurer les caractères qui sont utilisés pour cela?

Je vais faire ceci:

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) 
{ 
    return helper.Encode(unencodedUrl.Replace(' ', '-')); 
} 

Jusqu'à ce que je reçois une meilleure réponse de vous les gars.

Editer: Merci Guffa d'avoir signalé mon codage hâtif.

+0

ne pas oublier de prendre soin de caractères spéciaux – Cleiton

+0

Ceux-ci seraient pris en charge par l'appel à Encode de toute façon, ne pas? –

+0

Juste un commentaire en général: Le codage Url Path est différent du codage Url Parameter. Les caractères "+" dans le chemin ne remplacent pas correctement le caractère "" et causeraient des problèmes. Pour SEO comme vous l'avez fait ci-dessus, remplacer "" par "-" est une bonne technique cependant. MVC peut faire apparaître que les chemins et les paramètres de chaîne de requête sont interchangeables, mais ils ne le sont pas. –

Répondre

3

Vous ne pouvez pas modifier les caractères que la méthode UrlEncode utilise, l'utilisation de "+" pour les espaces est définie dans les normes pour la façon dont une URL est codée, en utilisant "-" à la place signifierait que la méthode changerait la valeur et pas seulement l'encoder. Comme le caractère "-" n'est pas codé, il n'y aurait aucun moyen de décoder la chaîne à la valeur d'origine.

Dans votre méthode, il n'est pas nécessaire de vérifier le caractère avant d'effectuer le remplacement. Si la méthode Replace ne trouve rien à remplacer, elle renvoie simplement la référence de chaîne d'origine.

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) { 
    return helper.Encode(unencodedUrl.Replace(' ', '-')); 
} 
+0

Merci pour le correctif de code. C'est plus que du simple encodage, en particulier, il rend les paramètres de l'URL plus favorables au SEO. Côté contrôleur, un appel à HttpUtility.Decode décode toutes les parties des paramètres qui ont été codés normalement. –

+0

Hm ... Pourquoi "cast-the-musical" serait-il plus favorable au SEO que "cats the musical"? – Guffa

+0

Qui sait, on m'a dit que c'était une façon google-préférée par un spécialiste du référencement lors d'une conférence à laquelle j'ai assisté. Stack Overflow semble faire la même chose aussi. –

4

Je veux attirer l'attention sur les différences par rapport à Chemin de codage de chaîne de requête

MVC permet/nous encourage à écrire des chemins (routes) qui peuvent être plus faciles à mémoriser que les chaînes de requête. par exemple. /Products.aspx?id=1 pourrait, dans MVC, être /Products/View/1

bâtiment à ce sujet, il encourage aussi, pour la convivialité de référencement, d'autres données qui peuvent ou peuvent ne pas être nécessaire comme /Products/View/1/Coffee

Si le nom comporte des caractères d'espace, ou un paramètre nécessaire est une chaîne contenant des caractères espace, et vous l'incluez dans le chemin Url, l'une des 2 choses doit se produire car un '' ne peut pas être laissé dans un paramètre Url Path ou Query string sans être codé.

  1. Vous devez UrlPathEncode() la chaîne
  2. d'abord vous transformez les espaces dans la chaîne,
    • puis appelez UrlPathEncode() que vous pouvez avoir d'autres caractères nécessitant un codage.

Remarque: il y a une grande différence entre Url Encoding (destiné à des chaînes de requête) et l'URL Encodage Path (destiné aux portions de chemin de urls)

  • cats the musical -> UrlEncode - >cats+the+musical - c'est pas valide dans un chemin url
  • cats the musical -> UrlPathEncode ->cats%20the%20musical

Si vous suivez le long; revenir à Web Forms vs MVC - /Products.aspx?name=Coffee+Beans serait réécrit comme /Products/View/Coffee%20Beans

Alors cela nous laisse où la question de OP commence. Q: Comment obtenez-vous SEO et humain Urls? Q: Utilisez le code @Guffas pour remplacer le "" par "-" dans votre propre code avant UrlPathEncoding le reste. Dans les sites où nous avons travaillé, lorsque nous avons une valeur saisie par l'utilisateur utilisée uniquement pour le référencement (comme un titre de blog ou similaire), nous allons encore plus loin en normalisant la chaîne de caractères en réduisant les espaces successifs en un seul. " par exemple

cats   the  musical
qui serait autrement cats-----the-----musical devient cats-the-musical

+0

Merci pour l'ajout utile. –

+0

Vous n'avez plus besoin de remplacer les espaces par des traits d'union. Les navigateurs modernes créeront de jolies URL pour vous, pas plus de% 20soup. –

+0

@ChrisMarisic merci pour la mise à jour. Il semble que Chrome et Firefox vont maintenant interpréter qu'un utilisateur a l'intention d'encoder l'URL, et ne sont pas aussi strictes avec leurs utilisateurs; ils vont encoder '' à% 20 pour eux. Firefox affichera des espaces, mais Chrome affichera toujours les% 20 dans la barre d'adresse. Cependant, le problème sous-jacent est que la spécification ne disparaît pas, et un pourcentage de 20% dans l'url, qui est toujours requis, n'est pas "respectueux de l'homme". Les utilisateurs coupent et collent des URL en dehors de ces navigateurs, et Firefox et Chrome encoderont toujours les URL correctement. –

Questions connexes