Saubere URLs mit „lesbaren“ Titeln erzeugen

Die als „Permalink“ oder „Slug“ bekannten Endungen von URLs, die meist den Titel abbilden, kennen wohl die meisten Internetnutzer. Dieser Beitrag hat zum Beispiel den Slug saubere-urls-mit-lesbaren-titeln-erzeugen.

Diese Art und Weise des Aufrufs ist eine leserfreundliche Alternative zum Aufruf via ID (index.php?id=3242) und bietet vor allem den Vorteil, dass der Leser sofort anhand der URL erkennen kann, welchen Artikel er aufgerufen hat.

Das Erzeugen eines URL Slugs ist nicht ganz so trivial. Zwar gibt es sehr einfache Methoden (zum Beispiel alle Zeichen zu verwerfen, die nicht a-z oder 0-9 sind), aber dann verliert die URL besonders im Deutschen viel Sinn. Denn Umlaute oder das ß würden komplett unter den Tisch fallen.

Bei Matteo Spinelli habe ich eine schöne Funktion gefunden, die ich jetzt benutze, um eigene Slugs zu erstellen. Alle nicht darstellbaren Zeichen werden bei dieser Funktion durch ähnliche Buchstaben ersetzt, also zum Beispiel das ß durch Doppel-S, ö und Ö durch o und so weiter.

Ich habe die Funktion für meine Zwecke angepasst und erweitert. Sie erzeugt jetzt einzigartige Slugs, vorausgesetzt niemand nutzt den gleichen Titel in exakt der gleichen Sekunde (das genügt als „uniqueness“ für meinen Anwendungsfall).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * Generate a readable (URL-valid) slug from a given string
 * @param string $str
 * @return string
 */
public static function slug($str){
 
	setlocale(LC_ALL, 'en_US.UTF8');
	$slug = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
	$slug = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $slug);
	$slug = strtolower(trim($slug, '-'));
	$slug = preg_replace("/[\/_|+ -]+/", '-', $slug);
	$slug = (time()-1388530800).'-'.$slug; //1388530800 => 2014-01-01
	return $slug;
 
}