ShuttleMexico

ShuttleMexico

Transport Company

Deluxe Kool Decking

Deluxe Kool Decking

Reconstruction Decking

Prentice Cleanning

Prentice Cleanning

Specializes in exceptional

MayaSpace

MayaSpace

Baby Patron | Web Personal

Sep
18

Generar Slugs para Urls Amigables con php

Escrito por Carlos Montalvo hace 3 meses y 1 semana, archivado en Desarrollo Web

Hoy en día la creación slugs basados en lo títulos de nuestros artículos es muy popular. WordPress, Drupal y muchos más lo utilizan de forma excelente. Sin duda los slugs son muy favorables para el posicionamiento web (SEO) en los buscadores especialmente en Google.

No basta con tener configurado tu htaccess o algún script que permita trabajar con urls amigables, especialmente si trabajamos con una tabla de artículos necesitaremos crear un slug de los títulos para que puedan ser leídos por el método que usemos para generar urls amigables.

Aquí un método que anos ayudara en este proceso.

function caracteres_latinos($cadena){
	//acentos
	$cadena = ereg_replace("(À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å)","a",$cadena);
	$cadena = ereg_replace("(È|É|Ê|Ë|è|é|ê|ë)","e",$cadena);
	$cadena = ereg_replace("(Ì|Í|Î|Ï|ì|í|î|ï)","i",$cadena);
	$cadena = ereg_replace("(Ò|Ó|Ô|Õ|Ö|Ø|ò|ó|ô|õ|ö|ø)","o",$cadena);
	$cadena = ereg_replace("(Ù|Ú|Û|Ü|ù|ú|û|ü)","u",$cadena);

	//la ñ
	$cadena = ereg_replace("(Ñ|ñ)","n",$cadena);

	//caracteres extraños
	$cadena = ereg_replace("(Ç|ç)","c",$cadena);
	$cadena = ereg_replace("ÿ","y",$cadena);

	return $cadena;
}

function generar_slug($cadena, $separador = '-'){
	//sin espacios al inicio o al final
	$cadena = trim($cadena);

	//limpiamos caracteres los latinos
	$cadena =  caracteres_latinos($cadena); 

	//pasamos a minúscula la cadena
	$cadena = strtolower($cadena); 

	//limpiamos saltos de líneas y tab
	$cadena = ereg_replace("[ \t\n\r]+", " ", $cadena);

	//limpiamos todos los caracteres inválidos
	$cadena = ereg_replace("[^ A-Za-z0-9_]", "", $cadena);

	//limpieza de espacios vacíos de los valores inválidos al final de la cadena
	$cadena = trim($cadena);

	//reemplazamos los espacios vacios por el separador
	$cadena = str_replace(" ", $separador, $cadena);

	return $cadena;
}

$str = generar_slug('Así es el ejemplo para generar el Slug ¿o no?');

//retornara #-> asi-es-el-ejemplo-para-generar-el-slug-o-no
echo $str;

Muy sencillo pero practico, lo podemos usar para generar un slug del titulo de nuestros artículos y grabarlo en otro campo de nuestra tabla el cual se convertiría en un identificador de la noticia.

Tags: , , ,

Entradas Relacionadas:

Se Referencio:

Comparte esta noticia:

5 Valiente(s) Opinaron, falta el tuyo comenta

    1

    Excelente. Hacía tiempo que quería quitar los acentos de las url de mi web y no lo había conseguido al 100 %. Con este script si me ha salido.

    Gracias!!

    Con Mozilla Firefox Mozilla Firefox 3.0.2 y Windows Windows Vista


    2

    Hola

    me parece super interesante! estoy tratando de hacer un CMS y eso me llevo a ver un poco en la web q es lo de urls amigables, y este articulo me parece bastante claro.

    pero como se utiliza? no entiendo como deberia funcionar la estructura. :( alguien q me oriente un poquito??

    Gracias

    Ana.

    Con Mozilla Firefox Mozilla Firefox 3.0.3 y Mac OS Mac OS X


    3

    @Anabella: Esta función podrias utilizarla justo antes de guardar el titulo de la noticia en tu tabla con lo cual generas el slug y tambien lo guardas.

    algo asi

    // supongamos que $_POST['titulo'] = “Anabella programando un CMS en php”;

    $titulo = $_POST['titulo'];
    //$titulo=”Anabella programando un CMS en php”

    $slug = generar_slug($titulo);
    //$slug=”anabella-programando-un-cms-en-php”

    $contenido = $_POST['contenido']);
    //$contenido=”El cms consta de 5 archivos…. etc”

    $query =”INSERT INTO noticias (titulo,slug, contenido)
    VALUES (’”.$titulo.”‘, ‘”.$slug.”‘, ‘”.$contenido.”‘)”;

    Luego el slug se volveria algo similar a un identificador de la noticia, que despues mediante la url.

    /index.php?noticia=anabella-programando-un-cms-en-php

    $query = “SELECT * FROM noticias WHERE slug=’”.$_GET['noticia'].”‘”;

    algo asi es la idea obviamente no olvidando validaciones previas :D .

    Saludos.

    Con Mozilla Firefox Mozilla Firefox 2.0.0.12 y Mac OS Mac OS X


    4

    Hola Alguien me puede explicar como se utiliza este script? tengo en la base donde se guarda el contenido de las paginas un campo reservado para el nombre amigable y despues pretendo levantar en el index cada contenido dependiendo de lo solicitado pero donde debe estar este script y que info debo enviarle?

    Gracias Ana

    Con Mozilla Firefox Mozilla Firefox 3.0.3 y Mac OS Mac OS X


    5

    Muy interesante!,

    He encontrado una rutina en que hace lo mismo pero algo mas elegante.

    http://debuggable.com/posts/title-to-url-slug-conversion:480f4dd6-a398-4c76-895c-4844cbdd56cb

    para convertir URL que es algo mas “fina” pero hace lo mismo.

    Yo le tuve que añadir una conversión de UTF8 a ISO al principio ( utf8_decode()) por que trabajo con UTF8.

    Con Safari Safari 525.19 y Mac OS Mac OS X


2 Sitio(s) que enlazan a esta noticia

  • Bitacoras.com:
    18 Septiembre, 2008 a las 2:59 pm
  • floreame.net:
    18 Septiembre, 2008 a las 4:03 pm
  • Danos tu opinion sobre esta noticia.

    CalinSoft se reserva el derecho de eliminar o editar todo comentario que considere ofensivo o difamatorio. Debatir, criticar NO ES INSULTAR.