Programador PHP freelance

24 Sep, 2008

Crear una URL friendly a partir de una cadena en PHP o como quitar los acentos a una cadena

Posted by: admin In: Desarrollo| SEO

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—”);
}
[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

Posts relacionados

8 Responses to "Crear una URL friendly a partir de una cadena en PHP o como quitar los acentos a una cadena"

1 | Israel Viana

October 3rd, 2008 at 1:52 pm

Avatar

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.

2 | admin

October 3rd, 2008 at 4:21 pm

Avatar

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 :D

Santi

3 | Programador Php

November 4th, 2009 at 3:47 am

Avatar

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 :)

4 | Evangelion

November 10th, 2010 at 5:13 pm

Avatar

ereg_replace es opsoleto

6 | Alberto

April 19th, 2011 at 9:07 pm

Avatar

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—”);
}

7 | admin

April 19th, 2011 at 9:44 pm

Avatar

Alberto, gracias por la aportación.

8 | Jesús

September 12th, 2011 at 10:27 pm

Avatar

muy útil la información, será de utilidad, 1saludo.

Comment Form

About

ProgramadorPHP.es es el blog profesional de Vicent González i Castells, programador freelance especializado en desarrollo de aplicaciones web. vigoncas@programadorphp.es

CURRÍCULUM

Tags