Foros del Web » Programando para Internet » PHP »

Limpiar URLs

Estas en el tema de Limpiar URLs en el foro de PHP en Foros del Web. Buenas, tengo un pequeño problema con una función que he hecho especificamente para limpiar URLs. El problema es que no las limpia al 100% por ...
  #1 (permalink)  
Antiguo 16/09/2011, 05:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Limpiar URLs

Buenas,

tengo un pequeño problema con una función que he hecho especificamente para limpiar URLs. El problema es que no las limpia al 100% por algun motivo. Dejo la función.

Código PHP:
Ver original
  1. function seoUrl($str){
  2.         $a = array('/(à|á|â|ã|ä|å|æ)/', '/(è|é|ê|ë)/', '/(ì|í|î|ï)/', '/(ð|ò|ó|ô|õ|ö|ø)/', '/(ù|ú|û|ü)/', '/ç/', '/þ/', '/ñ/', '/ß/', '/(ý|ÿ)/', '/(=|\+|\/|\\\|\.|\'|\_|\\n| |\(|\))/', '/[^a-z0-9_ -]/s', '/-{2,}/s');
  3.         $b = array('a','e','i','o','u','c','d','n','s','y','-','','-');
  4.         return trim(preg_replace($a, $b, strtolower($str)), '-');
  5.     }

Lo que sucede es que los acentos no los reemplaza. En lugar de ello no pone nada dejando, por ejemplo, en lugar de "fantasía" pone "fantasa"...en teoría...no deberia reemplazar toda la lista de "i" que he puesto, por la i normal del array B?

La verdad es que no se mucho del preg_replace y derivados. Si mal no recuerdo "str_replace" no me serviria en este caso porque no interpreta expresiones regulares...Entonces realmente no se porque no funciona pero bueno, como digo, no se demasiado. He ido mezclando cosas de otras funciones que he encontrado adaptandolas a una función independiente y quizás durante la mezcla he hecho algo que no debería.

Agradecería una manita
  #2 (permalink)  
Antiguo 16/09/2011, 07:58
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Limpiar URLs

proba una por una

function seoUrl($str){
$a = array('à');
$b = array('a');
return trim(preg_replace($a, $b, strtolower($str)), '-');
}
  #3 (permalink)  
Antiguo 16/09/2011, 12:59
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Limpiar URLs

Cita:
Iniciado por Patriarka Ver Mensaje
proba una por una

function seoUrl($str){
$a = array('à');
$b = array('a');
return trim(preg_replace($a, $b, strtolower($str)), '-');
}
En tal caso seria mejor utilizar str_replace, no? Si lo hago una a una sin utilizar expresiones regulares (supongo que una a una si funcionará) solo quería saber donde estaba el problema.

Creo que el problema proviene de

Código PHP:
Ver original
  1. '/[^a-z0-9_ -]/s'

Porque en el momento en el que añado "í" en esa expresión regular sale "fantas?a" (típico rombo con interrogante, que tampoco se porque sale solo ahí).

Así que ahora estoy más perdido que antes.

Última edición por Vendetta; 16/09/2011 a las 13:14
  #4 (permalink)  
Antiguo 16/09/2011, 13:28
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Limpiar URLs

El problema es que no puedes usar esto en preg_replace:

strtolower($str)

en vez de eso coloca la letra i (insensible a mayúsculas o minúsculas) en cada una de tus expresiones regulares. Sobre trim tampoco debe ir ahí, colocalo después de reemplazar. Prueba y nos comentas. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 16/09/2011, 14:38
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: Limpiar URLs

A lo mejor es un poco tonta la pregunta, pero, ¿porqué no usas urlencode()? si lo que quieres es codificar para URL.

Aunque leyendo creo que lo quieres para el tema SEO ¿no?
  #6 (permalink)  
Antiguo 16/09/2011, 17:13
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Limpiar URLs

S: He venido a mirar por mirar y el mensaje que hice antes no se envió!

@andresdzphp Gracias por responder...lo que hice fue separar el preg_replace y el resto de funciones, ahora si que va bien, tal y como comentabas.

@hasdpk Si, es para el tema SEO. Creo que el SEO es solo para momentos puntuales en la URL pero no es utilizable para hacerla amigable. Al menos eso creo, si no nadie haria funciones asi :P

Etiquetas: limpiar, url
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:47.