Slugify - Converter texto em slug com PHP

Gerar o padrão dos links em um formato amigável sempre foi o desafio de muita gente que não utiliza CMS. Isso até ontem, porque a partir de hoje você vai conseguir gerar também.

Se você manda bem no PHP, clique aqui ir direto ao código completo.

Primeira coisa é jogar o nosso texto em uma variável chamada string para manipularmos ela.

$string = 'Esse é o texto a ser trabalhado.          deixei espaço de propósito
 uma quebra de linha aqui';

Substituiremos as quebras de linhas e tabulações da nossa string.

$string = preg_replace('/[\t\n]/', ' ', $string);

Agora criaremos um array com uma lista de caracteres que queremos substituir. Usaremos a chave da para o que queremos remover e o valor para o que queremos colocar no lugar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
$list = array(
 'Š' => 'S',
 'š' => 's',
 'Đ' => 'Dj',
 'đ' => 'dj',
 'Ž' => 'Z',
 'ž' => 'z',
 'Č' => 'C',
 'č' => 'c',
 'Ć' => 'C',
 'ć' => 'c',
 'À' => 'A',
 'Á' => 'A',
 'Â' => 'A',
 'Ã' => 'A',
 'Ä' => 'A',
 'Å' => 'A',
 'Æ' => 'A',
 'Ç' => 'C',
 'È' => 'E',
 'É' => 'E',
 'Ê' => 'E',
 'Ë' => 'E',
 'Ì' => 'I',
 'Í' => 'I',
 'Î' => 'I',
 'Ï' => 'I',
 'Ñ' => 'N',
 'Ò' => 'O',
 'Ó' => 'O',
 'Ô' => 'O',
 'Õ' => 'O',
 'Ö' => 'O',
 'Ø' => 'O',
 'Ù' => 'U',
 'Ú' => 'U',
 'Û' => 'U',
 'Ü' => 'U',
 'Ý' => 'Y',
 'Þ' => 'B',
 'ß' => 'Ss',
 'à' => 'a',
 'á' => 'a',
 'â' => 'a',
 'ã' => 'a',
 'ä' => 'a',
 'å' => 'a',
 'æ' => 'a',
 'ç' => 'c',
 'è' => 'e',
 'é' => 'e',
 'ê' => 'e',
 'ë' => 'e',
 'ì' => 'i',
 'í' => 'i',
 'î' => 'i',
 'ï' => 'i',
 'ð' => 'o',
 'ñ' => 'n',
 'ò' => 'o',
 'ó' => 'o',
 'ô' => 'o',
 'õ' => 'o',
 'ö' => 'o',
 'ø' => 'o',
 'ù' => 'u',
 'ú' => 'u',
 'û' => 'u',
 'ý' => 'y',
 'ý' => 'y',
 'þ' => 'b',
 'ÿ' => 'y',
 'Ŕ' => 'R',
 'ŕ' => 'r',
 '/' => '-',
 ' ' => '-',
 '.' => '-',
);

Usando a função strtr passaremos a string mais a lista, a fim de que ocorra as substituições.

$string = strtr($string, $list);

As vezes pode ficar alguns hifens seguidos, precisamos remover os excessos.

$string = preg_replace('/-{2,}/', '-', $string);

Para finalizar, deixaremos tudo em minúsculo.

$string = strtolower($string);

Imagino que você usará esse mesmo código multiplas vezes, legal ele estar dentro de uma função, assim quando precisar só chama a função.

Código completo e já na função ficará algo como abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
function slugify($string) {
    $string = preg_replace('/[\t\n]/', ' ', $string);
    $string = preg_replace('/\s{2,}/', ' ', $string);
    $list = array(
        'Š' => 'S',
        'š' => 's',
        'Đ' => 'Dj',
        'đ' => 'dj',
        'Ž' => 'Z',
        'ž' => 'z',
        'Č' => 'C',
        'č' => 'c',
        'Ć' => 'C',
        'ć' => 'c',
        'À' => 'A',
        'Á' => 'A',
        'Â' => 'A',
        'Ã' => 'A',
        'Ä' => 'A',
        'Å' => 'A',
        'Æ' => 'A',
        'Ç' => 'C',
        'È' => 'E',
        'É' => 'E',
        'Ê' => 'E',
        'Ë' => 'E',
        'Ì' => 'I',
        'Í' => 'I',
        'Î' => 'I',
        'Ï' => 'I',
        'Ñ' => 'N',
        'Ò' => 'O',
        'Ó' => 'O',
        'Ô' => 'O',
        'Õ' => 'O',
        'Ö' => 'O',
        'Ø' => 'O',
        'Ù' => 'U',
        'Ú' => 'U',
        'Û' => 'U',
        'Ü' => 'U',
        'Ý' => 'Y',
        'Þ' => 'B',
        'ß' => 'Ss',
        'à' => 'a',
        'á' => 'a',
        'â' => 'a',
        'ã' => 'a',
        'ä' => 'a',
        'å' => 'a',
        'æ' => 'a',
        'ç' => 'c',
        'è' => 'e',
        'é' => 'e',
        'ê' => 'e',
        'ë' => 'e',
        'ì' => 'i',
        'í' => 'i',
        'î' => 'i',
        'ï' => 'i',
        'ð' => 'o',
        'ñ' => 'n',
        'ò' => 'o',
        'ó' => 'o',
        'ô' => 'o',
        'õ' => 'o',
        'ö' => 'o',
        'ø' => 'o',
        'ù' => 'u',
        'ú' => 'u',
        'û' => 'u',
        'ý' => 'y',
        'ý' => 'y',
        'þ' => 'b',
        'ÿ' => 'y',
        'Ŕ' => 'R',
        'ŕ' => 'r',
        '/' => '-',
        ' ' => '-',
        '.' => '-',
    );

    $string = strtr($string, $list);
    $string = preg_replace('/-{2,}/', '-', $string);
    $string = strtolower($string);

    return $string;
}
$string = 'Esse é o texto a ser trabalhado.          deixei espaço de propósito
uma quebra de linha aqui';

$slug = slugify($string);

echo $slug;

Achou alguma idéia ou melhoria?

Vai lá no nosso repositório e manda as suas alterações para nós. Ficaremos muito feliz de ver o seu código. Repositório