Blot et alternativ: en one-liner metode der fungerer ganske fint til sites tiltænkt et internationalt publikum, men nok ikke til sites udelukkende tiltænkt danskere (da den er fuldstændig ligeglad med æ, ø og å):
- function makeSlug($str)
- {
- return preg_replace('/[\W]+/', '-', strtolower($str));
- }
-
- echo makeSlug('!!! Hello_world! Danske bågstævør fjernes også !!!');
- // resulterer i "-hello_world-danske-b-gst-v-r-fjernes-ogs-"
NERD ALERT: i PCRE svarer \W til følgende character class: [^a-zA-Z0-9_] (ergo, blot en "omvendt" \w, som svarer til [a-zA-Z0-9_])
Et par variationer, alt efter hvad man leder efter:
- // fjerner også underscores
- return preg_replace('/[\W_]+/', '-', strtolower($str));
- // resulterer i "-hello-world-danske-b-gst-v-r-fjernes-ogs-"
-
- // trimmer strengen i begge ender
- return preg_replace(array('/(^[\W]+|[\W]+$)/', '/[\W_]+/'), array('', '-'), strtolower($str));
- // resulterer i "hello-world-danske-b-gst-v-r-fjernes-ogs"
Denne metode genererer ganske fine slugs (som de kaldes), så længe strengen ikke er spækket med danske bogstaver, som jeg gjorde her, blot for eksemplets skyld =P