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.
Leave a Reply