public function slugify($str)
    {
        static $sluggedArray;

        if (isset($sluggedArray[$str])) {
            return $sluggedArray[$str];
        }

        $metadata    = $this->metadata();
        $separator   = isset($metadata['routable']['separator']) ? $metadata['routable']['separator'] : '-';
        $delimiters  = '-_|';
        $pregDelim   = preg_quote($delimiters);
        $directories = '\\/';
        $pregDir     = preg_quote($directories);

        // Do NOT remove forward slashes.
        $slug = preg_replace('![^(\p{L}|\p{N})(\s|\/)]!u', $separator, $str);

        if (!isset($metadata['routable']['lowercase']) || $metadata['routable']['lowercase'] === false) {
            $slug = mb_strtolower($slug, 'UTF-8');
        }

        // Strip HTML
        $slug = strip_tags($slug);

        // Remove diacritics
        $slug = htmlentities($slug, ENT_COMPAT, 'UTF-8');
        $slug = preg_replace('!&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);!', '$1', $slug);

        // Simplify ligatures
        $slug = preg_replace('!&([a-zA-Z]{2})(lig);!', '$1', $slug);

        // Remove unescaped HTML characters
        $unescaped = '!&(raquo|laquo|rsaquo|lsaquo|rdquo|ldquo|rsquo|lsquo|hellip|amp|nbsp|quot|ordf|ordm);!';
        $slug = preg_replace($unescaped, '', $slug);

        // Unify all dashes/underscores as one separator character
        $flip = ($separator === '-') ? '_' : '-';
        $slug = preg_replace('!['.preg_quote($flip).']+!u', $separator, $slug);

        // Remove all whitespace and normalize delimiters
        $slug = preg_replace('![_\|\s|\(\)]+!', $separator, $slug);

        // Squeeze multiple delimiters and whitespace with a single separator
        $slug = preg_replace('!['.$pregDelim.'\s]{2,}!', $separator, $slug);

        // Squeeze multiple URI path delimiters
        $slug = preg_replace('!['.$pregDir.']{2,}!', $separator, $slug);

        // Remove delimiters surrouding URI path delimiters
        $slug = preg_replace('!(?<=['.$pregDir.'])['.$pregDelim.']|['.$pregDelim.'](?=['.$pregDir.'])!', '', $slug);

        // Strip leading and trailing dashes or underscores
        $slug = trim($slug, $delimiters);

        // Cache the slugified string
        $sluggedArray[$str] = $slug;

        return $slug;
    }
public function slugify($str)
    {
        static $sluggedArray;

        if (isset($sluggedArray[$str])) {
            return $sluggedArray[$str];
        }

        $metadata    = $this->metadata();
        $separator   = isset($metadata['routable']['separator']) ? $metadata['routable']['separator'] : '-';
        $delimiters  = '-_|';
        $pregDelim   = preg_quote($delimiters);
        $directories = '\\/';
        $pregDir     = preg_quote($directories);

        // Do NOT remove forward slashes.
        $slug = preg_replace('![^(\p{L}|\p{N})(\s|\/)]!u', $separator, $str);

        if (!isset($metadata['routable']['lowercase']) || $metadata['routable']['lowercase'] === false) {
            $slug = mb_strtolower($slug, 'UTF-8');
        }

        // Strip HTML
        $slug = strip_tags($slug);

        // Remove diacritics
        $slug = htmlentities($slug, ENT_COMPAT, 'UTF-8');
        $slug = preg_replace('!&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);!', '$1', $slug);

        // Simplify ligatures
        $slug = preg_replace('!&([a-zA-Z]{2})(lig);!', '$1', $slug);

        // Remove unescaped HTML characters
        $unescaped = '!&(raquo|laquo|rsaquo|lsaquo|rdquo|ldquo|rsquo|lsquo|hellip|amp|nbsp|quot|ordf|ordm);!';
        $slug = preg_replace($unescaped, '', $slug);

        // Unify all dashes/underscores as one separator character
        $flip = ($separator === '-') ? '_' : '-';
        $slug = preg_replace('!['.preg_quote($flip).']+!u', $separator, $slug);

        // Remove all whitespace and normalize delimiters
        $slug = preg_replace('![_\|\s|\(\)]+!', $separator, $slug);

        // Squeeze multiple delimiters and whitespace with a single separator
        $slug = preg_replace('!['.$pregDelim.'\s]{2,}!', $separator, $slug);

        // Squeeze multiple URI path delimiters
        $slug = preg_replace('!['.$pregDir.']{2,}!', $separator, $slug);

        // Remove delimiters surrouding URI path delimiters
        $slug = preg_replace('!(?<=['.$pregDir.'])['.$pregDelim.']|['.$pregDelim.'](?=['.$pregDir.'])!', '', $slug);

        // Strip leading and trailing dashes or underscores
        $slug = trim($slug, $delimiters);

        // Cache the slugified string
        $sluggedArray[$str] = $slug;

        return $slug;
    }
public function slugify ( $ str ) { static $ sluggedArray ; if ( isset ( $ sluggedArray [ $ str ] ) ) { return $ sluggedArray [ $ str ] ; } $ metadata = $ this -> metadata ( ) ; $ separator = isset ( $ metadata [ 'routable' ] [ 'separator' ] ) ? $ metadata [ 'routable' ] [ 'separator' ] : '-' ; $ delimiters = '-_|' ; $ pregDelim = preg_quote ( $ delimiters ) ; $ directories = '\\/' ; $ pregDir = preg_quote ( $ directories ) ; // Do NOT remove forward slashes. $ slug = preg_replace ( '![^(\p{L}|\p{N})(\s|\/)]!u' , $ separator , $ str ) ; if ( ! isset ( $ metadata [ 'routable' ] [ 'lowercase' ] ) || $ metadata [ 'routable' ] [ 'lowercase' ] === false ) { $ slug = mb_strtolower ( $ slug , 'UTF-8' ) ; } // Strip HTML $ slug = strip_tags ( $ slug ) ; // Remove diacritics $ slug = htmlentities ( $ slug , ENT_COMPAT , 'UTF-8' ) ; $ slug = preg_replace ( '!&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);!' , '$1' , $ slug ) ; // Simplify ligatures $ slug = preg_replace ( '!&([a-zA-Z]{2})(lig);!' , '$1' , $ slug ) ; // Remove unescaped HTML characters $ unescaped = '!&(raquo|laquo|rsaquo|lsaquo|rdquo|ldquo|rsquo|lsquo|hellip|amp|nbsp|quot|ordf|ordm);!' ; $ slug = preg_replace ( $ unescaped , '' , $ slug ) ; // Unify all dashes/underscores as one separator character $ flip = ( $ separator === '-' ) ? '_' : '-' ; $ slug = preg_replace ( '![' . preg_quote ( $ flip ) . ']+!u' , $ separator , $ slug ) ; // Remove all whitespace and normalize delimiters $ slug = preg_replace ( '![_\|\s|\(\)]+!' , $ separator , $ slug ) ; // Squeeze multiple delimiters and whitespace with a single separator $ slug = preg_replace ( '![' . $ pregDelim . '\s]{2,}!' , $ separator , $ slug ) ; // Squeeze multiple URI path delimiters $ slug = preg_replace ( '![' . $ pregDir . ']{2,}!' , $ separator , $ slug ) ; // Remove delimiters surrouding URI path delimiters $ slug = preg_replace ( '!(?<=[' . $ pregDir . '])[' . $ pregDelim . ']|[' . $ pregDelim . '](?=[' . $ pregDir . '])!' , '' , $ slug ) ; // Strip leading and trailing dashes or underscores $ slug = trim ( $ slug , $ delimiters ) ; // Cache the slugified string $ sluggedArray [ $ str ] = $ slug ; return $ slug ; }
Convert a string into a slug.

@param  string $str The string to slugify.
@return string The slugified string.
Convert a string into a slug .