Close

Kod som gör snygga webbadresser

Utkast inför kommande mapusers.comOvan 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 urlsSå 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 »

Leave a Reply

Your email address will not be published. Required fields are marked *