La función en principio está pensada para convertir una cadena – el título de un post por ejemplo – en una URL amigable o URL friendly.
Por ejemplo. La cadena Hola mundo! (Continuación) al pasarla por la función quedaría convertida en hola-mundo-(continuacion)
Me encontré con varias funciones por ahí que hacían lo mismo pero me dieron muchos problemas porque trabajaban directamente con caracteres en vez de con el código del carácter.
Por otro lado adaptar la función para que solo elimine los acentos es inmediato por eso lo he puesto en el título del post. Por eso y porque ahora en un proyecto vuelvo a ella para reutilizarla en ese sentido.
Probarla y si os gusta y os funciona podéis dejarme un comentario para que lo sepa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function desaccent($string) { $string = strtolower($string) ;$string = str_replace(”?”, “”, $string) ; $string = str_replace(”¿”, “”, $string) ; $string = str_replace(”!”, “”, $string) ; $string = str_replace(”*”, “”, $string) ; $string = str_replace(”,”, “”, $string) ; return strtr(utf8_decode($string), “\xe1\xc1\xe0\xc0\xe2\xc2\xe4\xc4\xe3\xc3\xe5\xc5″. “\xaa\xe7\xc7\xe9\xc9\xe8\xc8\xea\xca\xeb\xcb\xed”. “\xcd\xec\xcc\xee\xce\xef\xcf\xf1\xd1\xf3\xd3\xf2″. “\xd2\xf4\xd4\xf6\xd6\xf5\xd5\x8\xd8\xba\xf0\xfa\xda”. “\xf9\xd9\xfb\xdb\xfc\xdc\xfd\xdd\xff\xe6\xc6\xdf\xf8″. ” .’”, “aAaAaAaAaAaAacCeEeEeEeEiIiIiIiInNo”. “OoOoOoOoOoOoouUuUuUuUyYyaAso—”); } |
Israel Viana says
Muy interesante. Yo uso ésta:
//Convierte una cadena a formato compatible con URL (minúsculas, sin acentos, espacios por guiones)
function aURL($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)));
$final=str_replace(“–“,”-“,$final);
$final=str_replace(“–“,”-“,$final);
return (strlen($final)>50) ? substr($final,0,strrpos(substr($final,0,50),”-“)):$final;
}
Como ves, además recorta la cadena hasta 50 caracteres de máximo.
admin says
Hola Israel,
como comentaba en el post el problema que encontré, al utilizar los caracteres directamente en vez de sus códigos, fué que al subir el script a un servidor me daba problemas porque no identificaba los mismos.
Documentándome en PHP.net ví que la gente estaba utilizando los códigos directamente para evitarse estos problemas y aunque es menos visual, la verdad es que funciona.
Gracias por tu post 😀
Santi
Programador Php says
Por cierto, podrías quitar las comillas del WP ( formatting.php en la línea de $dynamic_replacements ).
En mi caso uso esta:
———
function codifica_nombre_para_url($url){
$url = htmlentities(strtolower(utf8_decode($url)));
$url = str_replace(array(“á”,”é”,”í”,”ó”,”ú”,”ñ”,” “),array(“a”,”e”,”i”,”o”,”u”,”n”,”-“),$url);
return ereg_replace(‘(([^0-9a-zA-Z_])+)’, “-“,$url);
}
Por cierto, podrías quitar las comillas del WP ( formatting.php en la línea de $dynamic_replacements ).
En mi caso uso esta:
———
es otra alternativa posible 🙂
Evangelion says
ereg_replace es opsoleto
Jorge says
“opsoleto” es tu ortografía…
José Carlos says
obsoleto
Alberto says
Una versión mejorada de este código
function clear($s_str){
$a_char = array (‘?’, ‘¿’,’!’, ‘*’, ‘&’, ‘@’, ‘#’,
‘-‘, ‘(‘, ‘)’, ‘[‘,’]’, ‘{‘,’}’);
$s_str = str_replace($a_char, ”, strtolower($s_str));
return strtr(utf8_decode($s_str),
” \xe1\xc1\xe0\xc0\xe2\xc2\xe4\xc4\xe3\xc3\xe5\xc5″.
“\xaa\xe7\xc7\xe9\xc9\xe8\xc8\xea\xca\xeb\xcb\xed”.
“\xcd\xec\xcc\xee\xce\xef\xcf\xf1\xd1\xf3\xd3\xf2”.
“\xd2\xf4\xd4\xf6\xd6\xf5\xd5\x8\xd8\xba\xf0\xfa\xda”.
“\xf9\xd9\xfb\xdb\xfc\xdc\xfd\xdd\xff\xe6\xc6\xdf\xf8”,
“-aAaAaAaAaAaAacCeEeEeEeEiIiIiIiInNoOoOoOoOoOoOoouUuUuUuUyYyaAso—”);
}
admin says
Alberto, gracias por la aportación.
Jesús says
muy útil la información, será de utilidad, 1saludo.
Victor says
Buenas, esta es la que yo utilizo:
function slugurl($url) {
$url = strtolower($url);
$find = array(‘á’, ‘é’, ‘í’, ‘ó’, ‘ú’, ‘ñ’);
$repl = array(‘a’, ‘e’, ‘i’, ‘o’, ‘u’, ‘n’);
$url = str_replace ($find, $repl, $url);
// Añaadimos los guiones
$find = array(‘ ‘, ‘&’, ‘\r\n’, ‘\n’, ‘+’);
$url = str_replace ($find, ‘-‘, $url);
// Eliminamos y Reemplazamos demás caracteres especiales
$find = array(‘/[^a-z0-9\-]/’, ‘/[\-]+/’, ‘/]*>/’);
$repl = array(”, ‘-‘, ”);
$url = preg_replace ($find, $repl, $url);
return $url;
}
Jorge says
y qué sucede si esa URL ya existe???
admin says
Hola Jorge,
una solución es incrementar un sufijo numérico hasta que la url no exista. Es decir, pruebas añadiendo 1 y si existe 2 y así sucesivamente.
Abrazo