Skapa url-vänliga strängar som WordPress

2009-05-27 @ 20:50

Man får inte ha vilka tecken som helst i en webbadress (url). Därför måste tecken som exempelvis svenska tecken och mellanslag göras om så att de blir url-vänliga.

urlencode

I PHP finns en färdig funktion just för att göra strängar url-vänliga. Funktionen heter urlencode.

Funktionsanrop – urlencode

$string = 'Det här är ett "citat" i en url';
echo urlencode($string);

Skrivs ut på skärmen

Det+h%E4r+%E4r+ett+%22citat%22+i+en+url

Tyvärr blir en sådan url inte så snygg med våra svenska tecken. Dessutom är jag inte så förtjust i att byta ut mellanrum till plustecken. Min målsättning var att skapa en funktion i PHP som gjorde lika snygga urler som WordPress.

super_urlencode

Fördelen med super_urlencode, till skillnad från urlencode, är att våra svenska tecken översätts på ett bättre sätt. Istället för att göra om mellanslag till plustecken görs de med super_urlencode om till bindestreck istället vilket ökar läsbarheten.

Funktionen

function super_urlencode($string)
{
	$string = trim($string);
	$string = strtolower($string);
	$string = str_replace(array('å', 'ä', 'ö', ' '), array('a', 'a', 'o', '-'), $string);
	$string = ereg_replace("[^a-z0-9-]", "", $string);
	$string = ereg_replace("[-]+", "-", $string);

	return $string;
}

Funktionsanrop – super_urlencode

$string= 'Det här är ett "citat" i en url';
echo super_urlencode($string);

Skrivs ut på skärmen

det-har-ar-ett-citat-i-en-url

Tack till matusiak som delat med sig av sitt skript som den här funktionen baserar sig på. Tack också till Alexander Nyquist som kom med tipset att använda arrayer i funktionen str_replace.

Lämna gärna en kommentar om du hittar något sätt att förbättra eller optimera koden på.

RSS-feed för kommentarer

4 svar till “Skapa url-vänliga strängar som WordPress”

  • Alexander Nyquist
    2009-05-27 @ 21:46

    Bra funktion, mycket användbart!

    Dock rekomenderar jag dig att använda preg_replace då den är mycket snabbare.

  • Olof »
    2009-06-14 @ 18:08

    Jättebra funktion. Väldigt användbar!

  • Fredrik Duwelll »
    2011-02-26 @ 17:13

    Eftersom att den vanliga funktionen ”strtolower” inte stödjer specialtecknen ÅÄÖ så är det rekommenderat att använda följande;

    [code]
    $string = mb_strtolower($string, ‘UTF-8’);
    [/code]

  • Jens Törnell »
    2012-10-09 @ 12:58

    Jag hittade en bättre variant som verkar fungera i alla lägen…

    http://cubiq.org/the-perfect-php-clean-url-generator