Cómo crear url amigable en PHP

A la hora de crear un enlace amigable, debemos tener en cuenta que hay caracteres que los navegadores no admiten y otros que por temas de idiomas, pueden provocar problemas. Veamos cómo crear url amigable en PHP.

Hay algunas funciones en PHP que nos permiten limpiar caracteres que traen problemas como dobles comillas, comillas, acentos… Pueden ser funciones como htmlentities, htmlespecialchars u otras…

Pero vamos a hacernos una función propia que nos limpie una string para que forme un link limpio. Cuando digo limpio, me refiero a sacar ñ, vocales acentuadas, dobles comillas, comillas… y demás caracteres que no permiten los enlaces.

Pongamos un ejemplo clásico: en muchas ocasiones nos interesa que a partir de un texto que tenemos almacenado en la base de datos, el nombre del producto por ejemplo, crear un enlace amigable (url amigable). Veréis muchas funciones por Internet que se encarga de ello, y por eso me gustaría aportar mi granito de arena con una función que encontré por internet hace mucho tiempo (no recuerdo fuente de información) y que modifiqué para adaptarla a mis necesiades:

function limpiarEnlaces($cadena) {
  $eliminar=array("!","'","¡","?","¿","‘","\"","$","(",")",".",":",";","_","/","\\","\$","%","@","#",",", "«", "»");
  $buscados=array(" ","á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ","ü","à","è","ì","ò","ù","À","È","Ì","Ò","Ù");
  $sustitut=array("-","a","e","i","o","u","a","e","i","o","u","n","n","u","a","e","i","o","u","A","E","I","O","U");

  $final=strtolower(str_replace($buscados,$sustitut,str_replace($eliminar,"",$cadena)));
  return $final;
}

Esta es la versión fácil. Caracter que creamos no correcto, lo eliminamos o substituimos. Tenemos tres arrays. En la primera, los caracteres a eliminar. En la segunda los caracteres que hay que buscar, y en la otra, los caracteres por los que lo reemplazamos si lo encontramos.

  • Las mayúsculas, las convierta en minúsculas
  • Las vocales acentuadas, nos las convierta a no acentuadas
  • Los caracters como !, @, #… los elimine…

En definitiva, con la función str_lower y str_replace, cambiar los caracteres que no queremos, por los que podemos reemplazar y eliminar los que no queremos.

Espero que os sea de utilidad esta pequeña función que muestro cómo crear una url amigable en PHP, y que os sirva como inicio para crearos vuestra propia función.


Más información