Mit dieser statischen Klasse ist es möglich aus einem beliebigen PHP String einen s.g. Slug zu generieren. Dieser wird meistens für URLs genutzt, ist aber auch praktisch für Array-Keys und ähnliche Anwendungen.
Die Sluggifier Klasse beruht auf einem Kommentar von stackoverflow. Das gute an dieser Slug-Generierung ist, dass sie auch UTF-8 Zeichenketten in ASCII umwandelt.
Hinweis: Diese Funktion nutzt im Schritt (0) die Wordpress Funktion wp_trim_words()
. Das funktioniert natürlich auch nur in einem Wordpress-Kontext! Wenn man den Sluggyfier so benutzen möchte, einfach die Zeile löschen und bei den Parametern das int $max_words = 15
entfernen.
Beispiel benutzung: $slug = Sluggifier::get( 'Ich will ein Slug werden!' );
<?php /** * Wandelt einen String in einen ASCII-URL-Slug um. * * Methode wurde erweitert um die wp_trim_words() * Funktion, damit man den String vorher sinnvoll * auf Wortanzahl runter kürzen an. * * Ursprung/Source: * @link https://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string * * Beispiel: * $slug = Sluggifier::get( 'Ich will ein Slug werden!' ); */ class Sluggifier { public static function get( string $text, string $divider = '-', int $max_words = 15 ):string { if( empty($text) ) { return 'n-a'; } $text = wp_trim_words( $text, $max_words, '' ); // (0) (Wordpress Funktion) Text auf Wortanzahl kürzen $text = preg_replace( '~[^\pL\d]+~u', $divider, $text ); // (1) Alles was keine Buchstaben oder Zahlen sind ersetzen $text = iconv( 'utf-8', 'us-ascii//TRANSLIT', $text ); // (2) umwandeln von utf8 zu ascii $text = preg_replace( '~[^-\w]+~', '', $text ); // (3) unerwünschte Zeichen entfernen $text = trim( $text, $divider ); // (4) Leerzeichen am Ende & Anfang entfernen $text = preg_replace( '~-+~', $divider, $text ); // (5) Doppelte Divider löschen $text = strtolower( $text ); // (6) Alles als Kleinschreibung return $text; } }