Kod som gör snygga webbadresser


Ovan ett första utkast av den kommande webbplatsen mapusers.com Webbplatsen kommer innehålla några miljoner geopositioner redan vid publicering, bland annat städer, sjöar etc. Dock saknades förklarande adresser för punkterna. Därmed var det bara att börja koda. De flesta exemplen på hur man skapar friendly urls saknade insikten om våra …

Utkast inför kommande mapusers.com
Ovan ett första utkast av den kommande webbplatsen mapusers.com Webbplatsen kommer innehålla några miljoner geopositioner redan vid publicering, bland annat städer, sjöar etc.

Dock saknades förklarande adresser för punkterna. Därmed var det bara att börja koda. De flesta exemplen på hur man skapar friendly urls saknade insikten om våra svenska specialtecken, fransmännens egenheter m.fl.

Console app för att skapa friendly urls
Så jag gjorde en egen sammanställning som du kan se nedan kod för. Efter det var det bara att bygga en console application som hämtade 10 000 poster i taget, som saknade innehåll i fältet SLUG, och anropa Helpers.Utils.UrlToFriendly("namnet på platsen") och sedan uppdatera posten i databasen.

Det tog nästan hela natten, men till skillnad från datorn fick ju jag sova :)

Kodexempel för att skapa friendly URLs

using System;
using System.Text.RegularExpressions;

namespace Helpers {
    public class Utils {
        public static string UrlToFriendly(string Input)
        {
        if (String.IsNullOrEmpty(Input))
            return "";

        // remove entities
        Input = Regex.Replace(Input, @"&\\w+;", "");
        // Swedish and special chars
        Input = Regex.Replace(Input, "(\[åäá\])", "a", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        Input = Regex.Replace(Input, "(\[öó\])", "o", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        Input = Regex.Replace(Input, "(\[éè\])", "e", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        Input = Regex.Replace(Input, "(\[úü\])", "u", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        Input = Regex.Replace(Input, "(\[ñ\])", "n", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        Input = Regex.Replace(Input, "(\[í\])", "i", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline);
        // remove anything that is not letters, numbers, dash, or space
        Input = Regex.Replace(Input, @"\[^A-Za-z0-9\\-\\s\]", "");
        // remove any leading or trailing spaces left over
        Input = Input.Trim();
        // replace spaces with single dash
        Input = Regex.Replace(Input, @"\\s+", "-");
        // if we end up with multiple dashes, collapse to single dash            
        Input = Regex.Replace(Input, @"\\-{2,}", "-");
        // make it all lower case
        Input = Input.ToLower();
        // if it's too long, clip it
        if (Input.Length > 80)
            Input = Input.Substring(0, 79);
        // remove trailing dash, if there is one
        if (Input.EndsWith("-"))
            Input = Input.Substring(0, Input.Length - 1);
        return Input;
        }
    }
}

Här har du koden som ZIP-fil » (webbstrategiforalla.se/upload/utveckling/FriendlyURLs_nov_2010.zip)