Foros del Web » Programando para Internet » PHP »

Problema con header(Location:)

Estas en el tema de Problema con header(Location:) en el foro de PHP en Foros del Web. Buenas, desde hace unos días le estoy dando vueltas a un script de redirecciones que estoy intentando hacer. Trata de crear friendly urls, es decir, ...
  #1 (permalink)  
Antiguo 03/02/2008, 17:02
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Problema con header(Location:)

Buenas, desde hace unos días le estoy dando vueltas a un script de redirecciones que estoy intentando hacer.

Trata de crear friendly urls, es decir, de las bonitas para los buscadores.

Consta de dos partes, una en .htaccess que está funcionando, y la redirección para cuando la url no está bien escrita.

El problema lo tengo en esta última y es cosa del php, he intentado varias cosas pero sin resultado, y lo último que estoy intentando es que mire si hay caracteres que quiero sustituir, sustituirlos y hacer la redirección si los hay, y sino pues no redireccionar.

El código es el siguiente:

Código PHP:
function esta_limpio$haystack$needle ) {
     
$count 0;
     foreach (
$needle as $substring) {
          
$count += substr_count$haystack$substring);
     }
     return 
$count;
}

function 
sentence_cap($impexp$sentence_split) {
    
$textbad=explode($impexp$sentence_split);
    
$newtext = array();
    foreach (
$textbad as $sentence) {
        
$sentencegood=ucfirst($sentence);
        
$newtext[] = $sentencegood;
    }
    
$textgood implode($impexp$newtext);
    return 
$textgood;
}

function 
redireccionar_limpio($page){

$capitalizada sentence_cap("t/",$page);
$capitalizada sentence_cap(":",$capitalizada);
$capitalizada sentence_cap("/",$capitalizada);

$limpio = array(
"%E1" => "a",
"%C1" => "A",
"%E9" => "e",
"%C9" => "E",
"%ED" => "i",
"%CD" => "I",
"%F3" => "o",
"%D3" => "O",
"%FA" => "u",
"%DA" => "U",
"%C3%B1" => "n",
"%F1" => "n",
"%D1" => "N",
"/" => "-",
"%20" => "_",
" " => "_"
);

$sinespecialchars strtr($capitalizada$limpio);
$limpiar = array("%E1","%C1","%E9","%C9","%ED","%CD","%F3","%D3","%FA","%DA","%C3%B1","%F1","%D1","%20"," ","/");
$repetir esta_limpio($page$limpiar);    

          if(
$repetir '0'){
            
$destino "Location: ".$sinespecialchars;
            
header($destino);
            }
}


redireccionar_limpio($_GET['q']); 
El
Código PHP:
$_GET['q']) 
sería en este caso la parte variable de la url, es decir, todo lo que va detras de www.midominio.com/variable/de/la/url la cual quiero formatear de la siguiente forma:

Que capitalize la primera letra, y si hay : a mitad tambien, es decir
www.midominio.com/Variable:Deurl

Que si hay símbolos que no sean [a-Z], :, =, ? o &, los reemplace por sus homónimos (si son acentos, por el carácter sin el acento y si son otros por _)

El problema es que no he conseguido hacer que compruebe que son letras normales ya que en las url los carácteres se interpretan como %20 por ejemplo para el espacio.

Si alguien tiene una idea de como podría hacer que sea tan benévolo de decírmelo ya que lo único que consigo de momento es bucles infinitos.

Por cierto, mi htaccess es el siguiente:
Código:
RewriteEngine On
RewriteBase /script/pruebas
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?q=$1 [L,QSA]
Gracias por adelantado
  #2 (permalink)  
Antiguo 03/02/2008, 17:39
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Re: Problema con header(Location:)

despues de header($destino); va un break;
__________________
Salu2!
  #3 (permalink)  
Antiguo 03/02/2008, 17:54
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Problema con header(Location:)

he probado lo del break; y me sigue pasando lo mismo
  #4 (permalink)  
Antiguo 03/02/2008, 18:36
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Problema con header(Location:)

dale un exit;
  #5 (permalink)  
Antiguo 03/02/2008, 19:43
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Re: Problema con header(Location:)

Solo decia que falta algo despues del header( location ....

No me queda claro tu problema :|
__________________
Salu2!
  #6 (permalink)  
Antiguo 03/02/2008, 19:52
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Problema con header(Location:)

Cita:
Iniciado por Italico76 Ver Mensaje
Solo decia que falta algo despues del header( location ....

No me queda claro tu problema :|
Aps, gracias entonces xD.

Resumiendo es que quiero que cuando escriban una url, yo la redireccione a esa misma url limpia, de carácteres con comas y eso.

El problema es que no consigo hacer que haga solo una vez lo del header y cuando la url esta escrita correctamente ya no redireccione.
  #7 (permalink)  
Antiguo 03/02/2008, 20:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema con header(Location:)

Date una vuelta por http://www.php.net/urldecode y http://www.php.net/urlencode, además podría interesarte un pequeño tutorial que escribí acerca de reemplazar caracteres extraños.

Un saludo,
  #8 (permalink)  
Antiguo 03/02/2008, 23:33
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Problema con header(Location:)

Cita:
Iniciado por okram Ver Mensaje
Date una vuelta por http://www.php.net/urldecode y http://www.php.net/urlencode, además podría interesarte un pequeño tutorial que escribí acerca de reemplazar caracteres extraños.

Un saludo,
Gracias okram, he mirado el tutorial ya que quiero que las urls sean algo comprensible y funciona bien, pero lo que busco es sustituir los carácteres con acentos y eso por sus homónimos sin signos de puntuación.

Para que te hagas una idea busco algo parecido a lo que pasa cuando pones en wikipedia /categoría:fúbol de mesa, que los espacios pasan a _, al principio y despues de : se vuelve mayúscula y los acentos en lugar de pasar a ser signos con % pasen a ser por ejemplo así: /Categoria:Futbol_de_mesa

Gracias de todas formas
  #9 (permalink)  
Antiguo 03/02/2008, 23:58
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Re: Problema con header(Location:)

Cita:
Resumiendo es que quiero que cuando escriban una url, yo la redireccione a esa misma url limpia, de carácteres con comas y eso.
No podes! por que ? porque no puede haber espacios (reales) u otros caracteres en la url
El sustituir por %20, etc es una forma de codificar el contenido de variables cuando viajan "por GET"
__________________
Salu2!
  #10 (permalink)  
Antiguo 03/02/2008, 23:59
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Problema con header(Location:)

no he dicho que no pueda haberlos, he dicho que quiero sustituirlos por _ y carácteres normales en lugar de codificados.
  #11 (permalink)  
Antiguo 04/02/2008, 00:37
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Re: Problema con header(Location:)

A bueno.... pero no necesitas redireccionar. Digo... si quiero ir a http://www.miweb.com/nada%20que%20decir solo haz esto:

codificar ("http://www.miweb.com/nada%20que%20decir");
y del otro lado... (en esa misma pagina).... decodifica.

En codificar tendrias algo como:

Function codificar ($str){
$str = str_replace("%20" , "_" ,$str);
// otras lineas como esta
}

Codificar via httpaccess es mucho mejor idea............. pero no se como se haria
__________________
Salu2!
  #12 (permalink)  
Antiguo 05/02/2008, 03:34
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Problema con header(Location:)

Italico76, el script que he puesto arriba hace eso que tu dices en tu último comentario, el problema que tengo es que se genera un bucle, he pensado en hacer una función que cuente cuantos carácteres que no quiero hay, y que si hay caracteres que no quiero redireccione, sino que no redireccione, pero no sé como contar esta secuencia de carácteres:

[^a-Z]^:^?^& (si pasa esto quiero redireccionar, creo que se escribe así para que sean los que no he puesto ahí)
  #13 (permalink)  
Antiguo 05/02/2008, 08:45
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: Problema con header(Location:)

Gracias por la ayuda de verdad.

Al final lo he sacado haciendo este script:

Código PHP:
$patron '^[A-Za-z0-9_:]*$';
$valido = array ( $_GET['q'] );
foreach(
$valido as $v)
echo 
'Válido '.(ereg($patron$v) ? 'si' '<b>no</b>') . ": $v<br />\n"
El $patron son los carácteres que no queremos que valgan, por eso el ^ *$. Luego voy a preparar un if else que si me devuelve sí haga la redirección y si devuelve no se quede así.

Un saludo
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 14:06.