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—”); } |
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.
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
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 🙂
ereg_replace es opsoleto
“opsoleto” es tu ortografía…
obsoleto
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—”);
}
Alberto, gracias por la aportación.
muy útil la información, será de utilidad, 1saludo.
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;
}
y qué sucede si esa URL ya existe???
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