Skapa url-vänliga strängar som WordPress
2009-05-27 @ 20:50Man 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å.
2009-05-27 @ 21:46
Bra funktion, mycket användbart!
Dock rekomenderar jag dig att använda preg_replace då den är mycket snabbare.
2009-06-14 @ 18:08
Jättebra funktion. Väldigt användbar!
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]
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