Publi

Slugs amigables en PHP para usar en URLs

Cuando estamos desarrollando webs, normalmente tenemos que enlazar a contenidos creados por el usuario, y hoy en día está muy bien que la URL sea amigable tanto para el usuario, como para los buscadores y el navegador. Es decir, antes se veía mucho acceder a una página tipo: http://dominio.com/noticias.php?id=192391283 y ahora, eso mismo o vemos como http://dominio.com/noticias/2013/10/acabo-de-subir-un-slug-amigable . La URL es más larga, pero se indexa mejor, y al usuario le da una sensación algo más profesional.
Eso sí, aunque ya se permiten dominios con caracteres raros, y el tema de la codificación es casi del pasado, es recomendable no incluir caracteres raros como tildes, eñes, y letras extrañas que hay en algunos idiomas, porque al pasar el enlace de una persona a otra puede cambiar la codificación con la que la URL está escrita y cuando vamos a acceder, si ésta no coincide con la que tenemos en el servidor, la dirección no funcionaría. Pero como todas las codificaciones comunes coinciden en los primeros 127 valores, o lo que es lo mismo el código ASCII, utilizaremos caracteres contenidos ahí, pero además, evitaremos otros caracteres que nos pueden dar problemas, como ?, &, “, (espacio) y algunos más…

Al final nos quedamos con letras y números, y el guión, por lo que una “á” pasará a ser una “a”, una “ñ”, pasará a ser una “n”, etc.

Podemos utilizar este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function createSlug($str, $max=30)
{
        $out = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
        $out = substr(preg_replace("/[^-\/+|\w ]/", '', $out), 0, $max);
        $out = strtolower(trim($out, '-'));
        $out = preg_replace("/[\/_| -]+/", '-', $out);

        return $out;
}

function checkSlug($str)
{
        return preg_match ("/^[a-z0-9\-]*$/", $str);
}

$mySlug =  createSlug("Descripción de mi post en español normal, pero que se codificará de forma diferente para ser un texto amigable");
echo $mySlug."\n";
if (checkSlug($mySlug))
        echo "Buena";
?>

La función createSlug() probablemente la hayáis visto navegando por Internet, es muy corta y algo común, ésta admite dos argumentos, uno será la cadena a partir de la cual queremos crear el slug, y el otro será el tamaño máximo del slug que vamos a crear.

Adicionalmente, creé una función que verifica que la cadena que le pasamos es un struct, es decir, sólo contiene caracteres de la “a” a la “z”, en minúscula, números y guión, desde el prncipio hasta el final… muy útil para verificar el dato entrante en la URL antes de empezar a buscarlo en nuestra base de datos.

También podría interesarte...

Leave a Reply