Una de las tareas más comunes en el desarrollo de Web optimizada para los buscadores es el generar los URL en formato SEO, es decir que contengan el titulo, pero que no contengan tildes, comas, espacios en blanco. Esta vez les presentamos la forma de convertir los títulos en URLs optimizadas para los buscadores.
Implementando la text2url
A la función encargada de convertir un texto normal en formato URL la llamaremos text2url, implementaremos esta función en PHP. El primer paso es eliminar los espacios al inicio y al lcon la función trim, luego convertimos todo a minúsculas, luego limitamos los caracteres a números y letras y convertimos los demás caracteres en guiones. Adicionalmente eliminamos los saltos de línea, tabuladores y finalmente reemplazamos los espacios en blanco por un separador que en nuestro caso hemos asignado al guion (–).
function text2url($string) { $spacer = "-"; $string = trim($string); $string = strtolower($string); $string = trim(ereg_replace("[^ A-Za-z0-9_]", " ", $string)); $string = ereg_replace("[ \t\n\r]+", "-", $string); $string = str_replace(" ", $spacer, $string); $string = ereg_replace("[ -]+", "-", $string); return $string; }
Para hacer uso de esta función simplemente le pasamos como parámetro el texto que deseamos convertir a URL. Podemos ver un ejemplo de uso en el siguiente código.
$title = "MoFuse Versión movil de tu Web en Español"; echo $title; // MoFuse Versión movil de tu Web en Español echo text2url($title); // mofuse-versi-n-movil-de-tu-web-en-espa-ol
Un ejemplo practico de de uso de esta función es el momento de guardar información en nuestra base de datos, por ejemplo si tenemos un tabla donde guardamos los datos de nuestros productos, la forma de insertar esta información incluyendo el URL sería de la forma:
$name = $_POST['name']; $content = $_POST['content']; $url = text2url($_POST['name']); $sql = "INSERT INTO products (name, content, url) VALUES ('".$name."', '".$content."', '".$url."')"; mysql_query($insertSQL, $conn) or die(mysql_error());
Obviamente esta es una función básica que aunque cumple con los requisitos de crear URL amigables, se podría mejorar con la posibilidad de convertir la vocales tildadas o con diéresis en vocales normales, la cual con un poco de trabajo se puede implementar.
[download id=»7″ autop=»false»]
Comentarios Total 20 comentarios
Publicado: 17/11/2008 11:36 pm
Pues está bien saberlo… pues nunca he jugado muy bien con la función ereg_replace por eso de la sintaxis de las expresiones regulares, que nunca he acabado de pillar.
Yo vengo utilizando esta otra serie de transformaciones un poco más pesadas y más exhaustivas pero que creo que a nivel SEO tienen más valor porque traducen las vocales acentuadas a vocales no acentuadas, por ejemplo:
$txt = strtolower_utf8($txt);
$txt = str_replace(«á»,»a»,$txt); $txt = str_replace(«à»,»a»,$txt); $txt = str_replace(«ä»,»a»,$txt);
$txt = str_replace(«é»,»e»,$txt); $txt = str_replace(«è»,»e»,$txt); $txt = str_replace(«ë»,»e»,$txt);
$txt = str_replace(«í»,»i»,$txt); $txt = str_replace(«ì»,»i»,$txt); $txt = str_replace(«ï»,»i»,$txt);
$txt = str_replace(«ó»,»o»,$txt); $txt = str_replace(«ò»,»o»,$txt); $txt = str_replace(«ö»,»o»,$txt);
$txt = str_replace(«ú»,»u»,$txt); $txt = str_replace(«ù»,»u»,$txt); $txt = str_replace(«ü»,»u»,$txt);
$txt = str_replace(» «,»-«,$txt);
$txt = str_replace(«¿»,»»,$txt); $txt = str_replace(«?»,»»,$txt);
$txt = str_replace(«(«,»»,$txt); $txt = str_replace(«)»,»»,$txt);
$txt = str_replace(«[«,»»,$txt); $txt = str_replace(«]»,»»,$txt);
$txt = str_replace(«%»,»»,$txt);
$txt = str_replace(«ñ»,»n»,$txt);
$txt = str_replace(«ç»,»s»,$txt);
$txt = str_replace(«@»,»-«,$txt);
$txt = str_replace(«#»,»-«,$txt);
$txt = str_replace(«&»,»-«,$txt);
$txt = str_replace(«ç»,»c»,$txt);
$txt = str_replace(«;»,»-«,$txt);
$txt = str_replace(«,»,»-«,$txt);
$txt = str_replace(«:»,»-«,$txt);
$txt = str_replace(«{«,»-«,$txt);
$txt = str_replace(«}»,»-«,$txt);
$txt = str_replace(«.»,»-«,$txt);
$txt = str_replace(«¡»,»-«,$txt);
$txt = str_replace(«!»,»-«,$txt);
$txt = str_replace(«|»,»-«,$txt);
$txt = str_replace(«/»,»-«,$txt);
$txt = str_replace(«=»,»-«,$txt);
$txt = str_replace(«»,»-«,$txt);
$txt = str_replace(«+»,»-«,$txt);
$txt = str_replace(«‘»,»-«,$txt);
$txt = str_replace(«*»,»-«,$txt);
$txt = str_replace(«$»,»-«,$txt);
Además, has olvidad decir, que este tipo de transformaciones son también muy recomendables para construir nombres de archivo ;)
Por cierto, la primera transformación que aplico es para evitar problemas de juegos de caracteres (no me preguntes de dónde la saque, per funciona, jejeje):
function strtolower_utf8($inputString) {
$outputString = utf8_decode($inputString);
$outputString = strtolower($outputString);
$outputString = utf8_encode($outputString);
return $outputString;
}
Un saludo!
Sigo tu blog ;)
Pocos artículos pero buenos.
SERGI
Publicado: 18/11/2008 8:07 pm
Esta bueno, pero convierte los caracteres especiales (ñ,acentos, etc) en guiones! y la idea es que sea una palabra, si me cortas palabras como versi-on me estas cortando las piernas! Deberías arreglar la expresion regular.
Excelente blog! Tmb te voy a seguir ;)
Publicado: 18/11/2008 8:45 pm
Hola, antes que nada unas correcciones, yo también sigo tu blog, pero no son pocos artículos, son muy pocos y muy buenos.
caos30: Para evitar tanto código hay una forma (no la se pero se encuentra en google seguramente) para poner un solo str_replace y poner arreglos, asi no creo que evites el procesamiento pero al menos evitas tantas líneas de codigo.
Esa funcion está demasiado incompleta, tal vez se pueda extraer la funcion de wordpress, que lo hace bastante bien según parece.
Un saludo
Luciano
PD: sigue adelante (unijimpe?) que haces un trabajo muy bueno.
Publicado: 19/11/2008 10:35 am
Esta es la funcion que yo utilizo:
function urlAmigable($variable_sin_codificar)
{
$url =htmlentities(strtolower($variable_sin_codificar));
$b=array(«á»,»é»,»í»,»ó»,»ú»,»ñ»,»Ñ»,»Á»,»É»,»Í»,»Ó»,»Ú»,»à»,»è»,»ì»,»ò»,»ù»,»À»,»È»,»Ì»,»Ò»,»Ù»,»¡»);
$c=array(«a»,»e»,»i»,»o»,»u»,»n»,»n»,»a»,»e»,»i»,»o»,»u»,»a»,»e»,»i»,»o»,»u»,»a»,»e»,»i»,»o»,»u»,»»);
$url =str_replace($b,$c,$url);
$find = array(‘ ‘,’&’,’\r\n’,’\n’,’+’,’_’);
$url = str_replace ($find, ‘-‘, $url);
$find = array(‘/[^a-z0-9\-]/’,’/[\-]+/’,’/]*>/’);
$repl = array(»,’-‘,»);
$url = preg_replace ($find, $repl, $url);
return $url;
}
Publicado: 20/06/2009 12:44 am
hola que tal unijimpe muy bien eh como siempre tu apoyando, pero bueno yo recien chekeo ese post, je, ahm jose luis bueno me gusto esa funcion pero no convierte las vocales acentuadas o sera por algo mas, es q tambien la codificacion que colocaste ahm esta algo diferente osea parece q afecto el estilo de la web por q no aparece bien. espero aydua tambien gracias de antemano.
Publicado: 15/07/2009 12:12 pm
Mezclando un par de cosas y pensando en la internacionalización de las aplicaciones puede que os sirva esta funcion mejorada ;)
function elimina_acentos($cadena){
$table = array(‘Š’=>’S’, ‘š’=>’s’, ‘Đ’=>’Dj’, ‘đ’=>’dj’, ‘Ž’=>’Z’, ‘ž’=>’z’, ‘Č’=>’C’, ‘č’=>’c’, ‘Ć’=>’C’, ‘ć’=>’c’,’À’=>’A’, ‘Á’=>’A’, ‘Â’=>’A’, ‘Ã’=>’A’, ‘Ä’=>’A’, ‘Å’=>’A’, ‘Æ’=>’A’, ‘Ç’=>’C’, ‘È’=>’E’, ‘É’=>’E’,’Ê’=>’E’, ‘Ë’=>’E’, ‘Ì’=>’I’, ‘Í’=>’I’, ‘Î’=>’I’, ‘Ï’=>’I’, ‘Ñ’=>’N’, ‘Ò’=>’O’, ‘Ó’=>’O’, ‘Ô’=>’O’,’Õ’=>’O’, ‘Ö’=>’O’, ‘Ø’=>’O’, ‘Ù’=>’U’, ‘Ú’=>’U’, ‘Û’=>’U’, ‘Ü’=>’U’, ‘Ý’=>’Y’, ‘Þ’=>’B’, ‘ß’=>’Ss’,’à’=>’a’, ‘á’=>’a’, ‘â’=>’a’, ‘ã’=>’a’, ‘ä’=>’a’, ‘å’=>’a’, ‘æ’=>’a’, ‘ç’=>’c’, ‘è’=>’e’, ‘é’=>’e’,’ê’=>’e’, ‘ë’=>’e’, ‘ì’=>’i’, ‘í’=>’i’, ‘î’=>’i’, ‘ï’=>’i’, ‘ð’=>’o’, ‘ñ’=>’n’, ‘ò’=>’o’, ‘ó’=>’o’,’ô’=>’o’, ‘õ’=>’o’, ‘ö’=>’o’, ‘ø’=>’o’, ‘ù’=>’u’, ‘ú’=>’u’, ‘û’=>’u’, ‘ý’=>’y’, ‘ý’=>’y’, ‘þ’=>’b’,’ÿ’=>’y’, ‘Ŕ’=>’R’, ‘ŕ’=>’r’);
$a= strtr($cadena, $table);
$spacer = «-«;
$string = trim($a);
$string = strtolower($string);
$string = trim(ereg_replace(«[^ A-Za-z0-9_]», » «, $string));
$string = ereg_replace(«[ \t\n\r]+», «-«, $string);
$string = str_replace(» «, $spacer, $string);
$string = ereg_replace(«[ -]+», «-«, $string);
return $string;
}
Publicado: 15/07/2009 12:16 pm
Recordad que al postear aqui se han modificado las comillas, simplemente es cambiarlas.
Si te volvieras loco viendo que no funciona simplemente revisa la codificación de la pagina donde estñá la cadena de texto, yo siempre uso UTF-8
Saludos.
Publicado: 15/07/2009 11:18 pm
Gracias por el aporte, efectivamente esta función se puede mejorar para soportar todo tipo de codificaciones y caracteres.
Publicado: 10/09/2009 2:31 pm
Hola que tal tengo un problema yo quiero escribir articulos pero se me pide que sea en seo friendly como hago no se como hacer para pasarlo alguien me puede ayudar?
ESperanza
Publicado: 11/09/2009 8:53 am
HOla soy Esperanza no entiendo estos pasos que es php
Publicado: 11/09/2009 9:38 am
Esperanza, explica mas tu pregunta… Que estas haciendo, con que tecnologia estas utilizando y para que publico por ejemplo, con esa informacion te puedo responder adecuadamente.
Publicado: 20/09/2009 2:59 pm
holas , quisiera saber como uso este codigo en url en los buscadores:
function elimina_acentos($cadena){
$table = array(’Š’=>’S', ‘š’=>’s’, ‘Đ’=>’Dj’, ‘đ’=>’dj’, ‘Ž’=>’Z', ‘ž’=>’z', ‘Č’=>’C', ‘č’=>’c', ‘Ć’=>’C', ‘ć’=>’c',’À’=>’A', ‘Á’=>’A', ‘Â’=>’A', ‘Ã’=>’A', ‘Ä’=>’A', ‘Å’=>’A', ‘Æ’=>’A', ‘Ç’=>’C', ‘È’=>’E', ‘É’=>’E',’Ê’=>’E', ‘Ë’=>’E', ‘Ì’=>’I', ‘Í’=>’I', ‘Î’=>’I', ‘Ï’=>’I', ‘Ñ’=>’N', ‘Ò’=>’O', ‘Ó’=>’O', ‘Ô’=>’O',’Õ’=>’O', ‘Ö’=>’O', ‘Ø’=>’O', ‘Ù’=>’U', ‘Ú’=>’U', ‘Û’=>’U', ‘Ü’=>’U', ‘Ý’=>’Y', ‘Þ’=>’B', ‘ß’=>’Ss’,'à’=>’a', ‘á’=>’a', ‘â’=>’a', ‘ã’=>’a', ‘ä’=>’a', ‘å’=>’a', ‘æ’=>’a', ‘ç’=>’c', ‘è’=>’e', ‘é’=>’e',’ê’=>’e', ‘ë’=>’e', ‘ì’=>’i', ‘í’=>’i', ‘î’=>’i', ‘ï’=>’i', ‘ð’=>’o', ‘ñ’=>’n', ‘ò’=>’o', ‘ó’=>’o',’ô’=>’o', ‘õ’=>’o', ‘ö’=>’o', ‘ø’=>’o', ‘ù’=>’u', ‘ú’=>’u', ‘û’=>’u', ‘ý’=>’y', ‘ý’=>’y', ‘þ’=>’b',’ÿ’=>’y', ‘Ŕ’=>’R', ‘ŕ’=>’r');
$a= strtr($cadena, $table);
$spacer = “-”;
$string = trim($a);
$string = strtolower($string);
$string = trim(ereg_replace(”[^ A-Za-z0-9_]“, ” “, $string));
$string = ereg_replace(”[ \t\n\r]+”, “-”, $string);
$string = str_replace(” “, $spacer, $string);
$string = ereg_replace(”[ -]+”, “-”, $string);
return $string;
}
Publicado: 21/09/2009 12:02 am
Lo que hace esta función es limpiar una cadena te texto y dejar solamente los caracteres alfanuméricos básicos para con ello construir URLs que contengan las palabras clave de nuestro contenido. Por ejemplo para este post el URL es: http://blog.unijimpe.net/convertir-texto-en-url-seo/ como puedes ver al titulo se le ha eliminado los espacios en blanco, tildes y otros caracteres y ello se usa como URL.
Publicado: 24/10/2009 9:36 pm
olas kisiera convertir este link en una url
http://www.metroflog.com/doblezhito/?pos=%22%3E%3Ccenter%3E%3CH1%3EATRAPA%20EL%20TOPO%20CON%20EL%20MOUSE%20PARA%20GANAR%20ESTE%20TRUCO%20EN%20TU%20METRO!%3C/H1%3E%3C/center%3E%3Cbr%3E%3Cmarquee%20behavior=«alternate»%20direction=»up»%20width=»80%»%3E%3Cmarquee%20direction=»right»%20behavior=»alternate»%3E%3Ca%20href=»http://www.metroflog.com/doblezhito/?add_fav=yes»%3E%3Cimg%20src=»http://tbn2.google.com/images?q=tbn:cOt-ciqTCAEtCM:http://www.todoretro.com/categorias/series_internacionales/topo_gigio/img/topo_gigio_08.jpg%3C/a%3E%3C/marquee%3E%3C/marquee%3E
Publicado: 15/03/2010 10:43 am
Exelente aporte!!!!!!!!!
Publicado: 03/03/2011 3:39 am
Ud si son o se hacen otra forma mas fail y de ahorarse tanto labutro y memoria es evitar espacios escribiendo la URL junta ->http://blog.unijimpe.net/convertirtextoenurlseo.
Jaja
Ya Tu sabes
Publicado: 29/03/2011 12:56 am
Maxell, las expresiones regulares no consumen casi nada de procesamiento, aparte de servir para los buscadores, tambien sirven para los usuarios ese tipo de url’s, lo facil no siempre es lo optimo, ya obtendras experiencia con el paso del tiempo y entenderas.
Saludos.-
Publicado: 22/10/2011 4:03 am
Yo uso esta función (o mejor dicho, necesitaba una función y edité la de este blog) para que además aparezcan tildes, dieresis, cedillas… y todos esos caracteres en la url.
function text2url($string){
$spacer = '-';
$string =mb_strtolower($string,'UTF-8');//mb_ para eñes y tildes!
$string = preg_replace("/[\W]/u",' ', $string);//todo lo que no sea letra se cambia por espacio
$string = trim($string);//se borran los primeros espacios en caso de haberlos
$string = str_replace(' ', $spacer, $string);//se reemplazan
$string = preg_replace("/[ -]+/",'-', $string);//Se borran guiones consecutivos
return $string;
}
un ejemplo:
Holá, amiguiño!!!&/%oh
–>
holá-amiguiño-oh
PD: ereg_replace queda obsoleto, debe ser preg_ mas rapido
Publicado: 27/12/2011 5:02 pm
Creo que hay que tener algo de cuidado con las funciones str_replace() ereg_replace() y eregi_replace(), ya deberian estar levantando avisos en todas partes porque su tiempo ya pasó. Saludos cordiales!
Publicado: 03/10/2012 9:39 am
Siempre que busco una respuesta útil a los problemas diarios de coding, la termino encontrando acá. ¡Muy bueno tu uploader! Lo uso en muchos de mis sitios.