PHP use str_slug without changing Upper Cases PHP use str_slug without changing Upper Cases laravel laravel

PHP use str_slug without changing Upper Cases


As stated on a question on laracasts.com you can create your own version of the helper function, that leaves out mb_strtolower():

public static function slug($title, $separator = '-', $language = 'en'){    $title = static::ascii($title, $language);    // Convert all dashes/underscores into separator    $flip = $separator == '-' ? '_' : '-';    $title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);    // Replace @ with the word 'at'    $title = str_replace('@', $separator.'at'.$separator, $title);    // Remove all characters that are not the separator, letters, numbers, or whitespace.    // With lower case: $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));    $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', $title);    // Replace all separator characters and whitespace by a single separator    $title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);    return trim($title, $separator);}

Working example

Original implementation


Heres the implementation that str_slug uses:

/** * Generate a URL friendly "slug" from a given string. * * @param  string  $title * @param  string  $separator * @param  string  $language * @return string */public static function slug($title, $separator = '-', $language = 'en'){    $title = static::ascii($title, $language);    // Convert all dashes/underscores into separator    $flip = $separator == '-' ? '_' : '-';    $title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);    // Replace @ with the word 'at'    $title = str_replace('@', $separator.'at'.$separator, $title);    // Remove all characters that are not the separator, letters, numbers, or whitespace.    $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));    // Replace all separator characters and whitespace by a single separator    $title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);    return trim($title, $separator);}

Simply extend from this methods class or copy it to a new class of your own and then remove any code that converts case.