Foros del Web » Programando para Internet » PHP »

URLS amigables con caracteres especiales

Estas en el tema de URLS amigables con caracteres especiales en el foro de PHP en Foros del Web. Hola comunidad. Estoy trabajando en las URL amigables de mi web y me surgió una duda. Resulta que tengo una página de tags con la ...
  #1 (permalink)  
Antiguo 30/11/2013, 10:45
 
Fecha de Ingreso: septiembre-2008
Mensajes: 47
Antigüedad: 15 años, 7 meses
Puntos: 1
Pregunta URLS amigables con caracteres especiales

Hola comunidad. Estoy trabajando en las URL amigables de mi web y me surgió una duda.

Resulta que tengo una página de tags con la siguiente estructura para los links:

Estructura original: "example.com/anuncios/tag.php?id=$id"
URL amigable: "example.com/anuncios/05_titulo-del-tag.html"

Donde 05 sería el id. El problema de esto es que para armar la url amigable uso el id del tag, entonces puedo poner cualquier cosa como: "example.com/anuncios/05_cualquier-cosa" y me manda a una página con el mismo contenido. Osea: infinitas URL que dirigen al mismo contenido.

Para solucionar esto, use el nombre del tag, en vez de ID para armar la url amigable. Así me evito poner números.

Estructura original: example.com/anuncios/tag.php?nombre=$nombre
URL amigable: example.com/anuncios/nombre-tag.html

El problema que tengo ahora, es que algunos tags pueden tener caracteres raros como "Ñ" o acentos en sus "nombres" (que están guardados en la base de datos). Veo que no recomiendan usar Ñ en las URL. ¿Hay alguna solución a esto?
  #2 (permalink)  
Antiguo 30/11/2013, 11:02
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: URLS amigables con caracteres especiales

Dejalo como estaba antes con el ID, y solamente hace un if que redireccione si el nombre del tag que figura en la URL no es el que tendría que ser.

Algo como (a esto agregale todas las validaciones y cosas que quieras):

Código PHP:
Ver original
  1. $tag = traeme_el_tag($_GET['id']);
  2.  
  3. //Suponiendo que esta función convierte "mi tag" en "mi-tag" para la url
  4. $tag_url = crear_url($tag->nombre);
  5.  
  6. if ($tag->nombre != $tag_que_figura_en_la_url)
  7. {
  8.     header("Location: /anuncios/$tag_url");
  9. }

Y asi solucionás el problema, aparte que cuando tengas muchos tags es mucho más rápido buscar valores numéricos en la base de datos que cadenas.
  #3 (permalink)  
Antiguo 30/11/2013, 11:16
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: URLS amigables con caracteres especiales

No existe nada para los apostrofes ni para los acentos.
Lo que si puedes hacer es buscar un signo aceptado en las url, que sepas que no vas a ingresar nunca y sustituir la ñ por ese caracter.
por ejemplo para separar palabras usas - pero para separar el 05 usas _, si sustitulles el _ por - podrias usar la _ como sustitutivo de ñ.
Otra solucion es que cambies la ñ por n.
Las URL amigables son mas que nada para el SEO y pueden admmitir mejor que suene mal la palabra con la n a usar _.
Eso es cuestion de ti y de por que estes usando URL amigables.
  #4 (permalink)  
Antiguo 30/11/2013, 11:38
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: URLS amigables con caracteres especiales

Lo que quieres hacer, es la forma correcta de hacer urls amigables. Para ello, en la tabla de tags de sql, debes añadir un nuevo campo que se llame "slug", que es a cómo se le conoce esta técnica en el desarrollo web.

un slug es una cadena de texto convertida a un formato válido para poner en la URL.

Para llenar ese campo, no tienes mas que aplica la funcion str2Slug($cadena); a cada tag. El campo slug debe tener una restricción de tipo UNIQUE, como es natural. Esta función la puedes reutilizar en muchas partes, si pones toda tu web con urls amigables:

Código PHP:
Ver original
  1. function str2Slug($cadena,$separador="-"){
  2.     $slug = iconv('UTF-8', 'ASCII//TRANSLIT', $cadena);
  3.     $slug = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $slug);
  4.     $slug = strtolower(trim($slug, $separador));
  5.     $slug = preg_replace("/[\/_|+ -]+/", $separador, $slug);
  6.     return $slug;
  7. }

Por ejemplo, para la cadena ""Ésto es una cadena con eñes y áéíóú."
Sacaría "esto-es-una-cadena-con-enes-y-aeiou"

Para obtener el dato, solo necesitas obtener el trozo de la url que tú sabes que es el slug, y buscar su correspondiente coincidencia en el campo slug de cualquier tabla susceptible.

Etiquetas: amigables, caracteres, especiales, html, urls
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.