9
votes

Meilleur moyen de créer une chaîne URI conviviale SEO

La méthode ne doit autoriser que " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ - " Chars dans les chaînes d'Uri.

Quelle est la meilleure façon de faire de la belle chaîne de SEO URI?


5 commentaires

Cela ressemble à une idée terrible. Considérez encoder l'URL à la place.


@Marcog: Cela ressemble beaucoup à ce que cela permet de générer des URL respectueuses de l'environnement de titres. Je serais très tenté de simplement remplacer toutes les séquences de charcuterie non alnum avec un seul trait d'union; même effet général (si peut-être légèrement différent dans des cas de bord), mais plus facile à comprendre.


@Donal Oh, à droite. Vous généreriez sûrement une chaîne aléatoire de l'ensemble des caractères autorisés cependant?


@marcog: Quoi, c'est que la partie (qui n'a pas d'importance ) à la fin de l'URL; Le fragment de chemin avant est un identifiant qui est ce qui localise la question. Il est prudent d'utiliser la saisie de l'utilisateur pour cela car la désinfection est définie en termes d'une grave blancheur de caractères. (Chaîne aléatoire? Où est-ce venu?)


@Donal d'accord, je vois ce que vous parlez de. Je pensais que vous vouliez dire l'identifiant, par exemple 4581025 Pour cette question. Merci de clarifier!


3 Réponses :


4
votes

La regex suivante fera la même chose que votre algorithme. Je ne suis pas au courant des bibliothèques pour faire ce type de chose.

String s = input
.replaceAll(" ?- ?","-") // remove spaces around hyphens
.replaceAll("[ ']","-") // turn spaces and quotes into hyphens
.replaceAll("[^0-9a-zA-Z-]",""); // remove everything not in our allowed char set


0 commentaires

35
votes

C'est ce que le consensus général est:

  1. minuscule la chaîne. P>

    public static String toPrettyURL(String string) {
        return Normalizer.normalize(string.toLowerCase(), Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
            .replaceAll("[^\\p{Alnum}]+", "-");
    }
    
  2. Normaliser Tous les personnages et se débarrasser de tous les Diacritical Marks (de sorte que, par exemple, ö, ã¶, devient E, O, A). P>

    string = string.replaceAll("[^\\p{Alnum}]+", "-");
    
  3. Remplacez tous les caractères non alphanumériques restants par - code> et effondrer si nécessaire. P>

    string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
    


1 commentaires

Recommandez également la suppression de la ponctuation de premier plan et de suivi. // Supprimer la ponctuation de fuite .ReplaceAll ("[^ A-Z0-9] + $", "") // Supprimer la ponctuation principale .ReplaceAll ("^ [^ A-Z0-9] +", "");



1
votes

Ceux-ci sont communément appelés "Slugs" si vous souhaitez rechercher plus d'informations.

Vous voudrez peut-être consulter d'autres réponses telles que Comment créer une URL de Dash SEO conviviale à partir d'une chaîne? et Comment faire fonctionner correctement le travail de Django Slugify avec des chaînes Unicode?

Ils couvrent le C # et Python plus que JavaScript mais ont une discussion sur la langue-agnostique sur les conventions de limites et les problèmes que vous pouvez faire face lorsque vous les faisant (comme unicité, problèmes de normalisation unicode, etc.).


0 commentaires