Slug - Generate URL Slug

Generate a URL friendly "slug" from a given string.

/**
     * Generate a URL friendly "slug" from a given string.
     *
     * @param  string  $title
     * @param  string  $separator
     * @return string
     */
    function slug($title, $separator = '-')
    {

        $charsArrays = charsArray();

        foreach($charsArrays as $key => $val) {
             $title = str_replace($val, $key, $title);
        }

        $title = preg_replace('/[^\x20-\x7E]/u', '', $value);

        // Convert all dashes/underscores into separator

        $flip = $separator == '-' ? '_' : '-';

        $title = preg_replace('!['.preg_quote($flip).']+!u', $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);
    }


    // Char Ascii Hack

    function charsArray()
    {
        static $charsArray;
        if (isset($charsArray)) {
            return $charsArray;
        }
        return $charsArray = [
            '0'    => ['°', '?', '?'],
            '1'    => ['¹', '?', '?'],
            '2'    => ['²', '?', '?'],
            '3'    => ['³', '?', '?'],
            '4'    => ['?', '?', '?', '?'],
            '5'    => ['?', '?', '?', '?'],
            '6'    => ['?', '?', '?', '?'],
            '7'    => ['?', '?', '?'],
            '8'    => ['?', '?', '?'],
            '9'    => ['?', '?', '?'],
            'a'    => ['à', 'á', '?', 'ã', '?', '?', '?', '?', '?', '?', '?', 'â', '?', '?', '?', '?', '?', '?', '?', 'å', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'ª', '?', '?', '?'],
            'b'    => ['?', '?', '?', '?', '?', '?', '?'],
            'c'    => ['ç', '?', '?', '?', '?'],
            'd'    => ['?', 'ð', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'e'    => ['é', 'è', '?', '?', '?', 'ê', '?', '?', '?', '?', '?', 'ë', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'f'    => ['?', '?', '?', 'ƒ', '?'],
            'g'    => ['?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'h'    => ['?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'i'    => ['í', 'ì', '?', '?', '?', 'î', 'ï', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '??', '?', '?', '?'],
            'j'    => ['?', '?', '?', '?', '?'],
            'k'    => ['?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'l'    => ['?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'm'    => ['?', '?', '?', '?', '?'],
            'n'    => ['ñ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'o'    => ['ó', 'ò', '?', 'õ', '?', 'ô', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'ø', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '??', '?', '?', 'º', '?', '?'],
            'p'    => ['?', '?', '?', '?', '?'],
            'q'    => ['?'],
            'r'    => ['?', '?', '?', '?', '?', '?', '?'],
            's'    => ['?', 'š', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            't'    => ['?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'u'    => ['ú', 'ù', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'û', '?', '?', '?', '?', '?', 'µ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'v'    => ['?', '?', '?'],
            'w'    => ['?', '?', '?', '?', '?'],
            'x'    => ['?', '?'],
            'y'    => ['ý', '?', '?', '?', '?', 'ÿ', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'z'    => ['?', 'ž', '?', '?', '?', '?', '?', '?'],
            'aa'   => ['?', '?', '?'],
            'ae'   => ['ä', 'æ', '?'],
            'ai'   => ['?'],
            'at'   => ['@'],
            'ch'   => ['?', '?', '?', '?'],
            'dj'   => ['?', '?'],
            'dz'   => ['?', '?'],
            'ei'   => ['?'],
            'gh'   => ['?', '?'],
            'ii'   => ['?'],
            'ij'   => ['?'],
            'kh'   => ['?', '?', '?'],
            'lj'   => ['?'],
            'nj'   => ['?'],
            'oe'   => ['ö', 'œ', '?'],
            'oi'   => ['?'],
            'oii'  => ['?'],
            'ps'   => ['?'],
            'sh'   => ['?', '?', '?'],
            'shch' => ['?'],
            'ss'   => ['ß'],
            'sx'   => ['?'],
            'th'   => ['þ', '?', '?', '?', '?'],
            'ts'   => ['?', '?', '?'],
            'ue'   => ['ü'],
            'uu'   => ['?'],
            'ya'   => ['?'],
            'yu'   => ['?'],
            'zh'   => ['?', '?', '?'],
            '(c)'  => ['©'],
            'A'    => ['Á', 'À', '?', 'Ã', '?', '?', '?', '?', '?', '?', '?', 'Â', '?', '?', '?', '?', '?', 'Å', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'B'    => ['?', '?', '?'],
            'C'    => ['Ç', '?', '?', '?', '?'],
            'D'    => ['?', 'Ð', '?', '?', '?', '?', '?', '?', '?', '?'],
            'E'    => ['É', 'È', '?', '?', '?', 'Ê', '?', '?', '?', '?', '?', 'Ë', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'F'    => ['?', '?'],
            'G'    => ['?', '?', '?', '?', '?', '?'],
            'H'    => ['?', '?', '?'],
            'I'    => ['Í', 'Ì', '?', '?', '?', 'Î', 'Ï', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'K'    => ['?', '?'],
            'L'    => ['?', '?', '?', '?', '?', '?', '?', '?'],
            'M'    => ['?', '?'],
            'N'    => ['?', 'Ñ', '?', '?', '?', '?', '?'],
            'O'    => ['Ó', 'Ò', '?', 'Õ', '?', 'Ô', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Ø', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'P'    => ['?', '?'],
            'R'    => ['?', '?', '?', '?', '?'],
            'S'    => ['?', '?', '?', 'Š', '?', '?', '?'],
            'T'    => ['?', '?', '?', '?', '?', '?'],
            'U'    => ['Ú', 'Ù', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Û', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'V'    => ['?'],
            'W'    => ['?', '?', '?'],
            'X'    => ['?', '?'],
            'Y'    => ['Ý', '?', '?', '?', '?', 'Ÿ', '?', '?', '?', '?', '?', '?', '?', '?', '?'],
            'Z'    => ['?', 'Ž', '?', '?', '?'],
            'AE'   => ['Ä', 'Æ', '?'],
            'CH'   => ['?'],
            'DJ'   => ['?'],
            'DZ'   => ['?'],
            'GX'   => ['?'],
            'HX'   => ['?'],
            'IJ'   => ['?'],
            'JX'   => ['?'],
            'KH'   => ['?'],
            'LJ'   => ['?'],
            'NJ'   => ['?'],
            'OE'   => ['Ö', 'Œ'],
            'PS'   => ['?'],
            'SH'   => ['?'],
            'SHCH' => ['?'],
            'SS'   => ['?'],
            'TH'   => ['Þ'],
            'TS'   => ['?'],
            'UE'   => ['Ü'],
            'YA'   => ['?'],
            'YU'   => ['?'],
            'ZH'   => ['?'],
            ' '    => ["\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81", "\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84", "\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87", "\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A", "\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80"],
        ];
    }
    

Loading ...

About the Author