Foros del Web » Programando para Internet » PHP »

Truncado de url condicionado a "&"

Estas en el tema de Truncado de url condicionado a "&" en el foro de PHP en Foros del Web. Hola amigos, Me está pasando una cosa bastante curiosa que os voy a comentar por si me podeis echar un cable. 1.- Tengo una pagina1.php ...
  #1 (permalink)  
Antiguo 01/10/2003, 10:47
 
Fecha de Ingreso: mayo-2003
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Truncado de url condicionado a "&"

Hola amigos,

Me está pasando una cosa bastante curiosa que os voy a comentar por si me podeis echar un cable.

1.- Tengo una pagina1.php que contiene una función javascript que se encarga de abrir una pagina2.php con parámetros. Concretamente el código es como sigue:

Código PHP:
<SCRIPT language="Javascript">
function 
abrir_pagina() {
var 
ventana,cadena;
cadena="pagina2.php?dest=" document.form_enviar.destino.value "&orig=" document.form_enviar.origen.value "&url=" document.location.href;
ventana=window.open(cadena,"ventana","width=400,height=110,directories=no,location=no,menubar=no,scrollbars=no,status=no,toolbar=no,resizable=no,left=365,top=490,screenX=0,screenY=0");
};
</SCRIPT> 
Hasta aqui nada del otro mundo a no ser por lo que sigue.

2.- En la pagina2.php tomo esos valores y mando un mail. Pues bien, paso tres paramentros (dos direcciones de correo y una url).
Muestro el código y luego comento:

Código PHP:
<?
$destino 
$_GET["dest"];
$origen $_GET["orig"]; 
$url $_GET["url"];

echo 
"url :" $url;

$asunto "xxx"
$cuerpo "yyy ".$origen"yyy\n\n";
$cuerpo .= $url "\n\n";

$cabecera "FROM: " $origen "<[email protected]>";

mail($destino,$asunto,$cuerpo,$cabecera); 
?>
El caso es que cuando esa url solo lleva un parámetro al pintarla me da la url buena, sin embargo, cuando lleva mas de un parametro (separado por &), me omite ese segundo parámetro. Es como si al encontrarse un "&" no tomara en cuenta ni el propio caracter ni lo que viene detras, truncandolo.

Me explico:

Caso en el que funciona:

En la pagina1.php y mediante href asigno a la variable url lo siguiente:

http://www.dominio.com/pagina.php?id1=10

En este caso al pintar la variable en la pagina2.php no me trunca nada (solo paso un parametro y no esta en la cadena "&")

Caso en el que NO funciona:

En la pagina1.php y mediante href asigno a la variable url lo siguiente:

http://www.dominio.com/pagina.php?id1=10&id2=20

En este caso al pintar la variable en la pagina2.php TRUNCA ( paso más de un parametro separado por "&")

¿Podría estar el problema en $url = $_GET["url"];?

Un saludo y gracias por vuestra ayuda,
__________________
Lailuluelo
El error está en lo obvio
  #2 (permalink)  
Antiguo 01/10/2003, 11:20
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

El problema es que esta tomando ese segundo parametro de la url que pasas como parametro de la URL original. Es decir, que la tendras en el $_GET. Haz:
Código PHP:
echo '<pre>';
print_r($_GET);
echo 
'</pre>'
para ver lo que pasa.

La solucion es codificar ese parametro URL (como en estos foros). Mira las funciones urlencode() (www.php.net/urlencode) y rawurlencode() (www.php.net/rawurlencode). Simplemente usa esa funcion para crear el link.

Ahora que me fijo, usas javascript para crear la URL. Creo que la funcion equivalente en javascript es escape(), pero no estoy seguro. Pregunta en el foro de javascript y haz pruebas. Y comunicanos tus resultados. Creo que puede interesar los programadores PHP.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 02/10/2003, 01:55
 
Fecha de Ingreso: mayo-2003
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 0
Solución

Hola,

Andaba yo tratando de reinventar la rueda cuando me proporcionaron la idea (gracias Josemi) de utilizar una función que curiosamente hacia lo que yo buscaba.

Pues aqui os plasmo la solución, bastante sencilla, unicamente es pasar esa url codificada con la función escape() de JS, quedando el codigo de tal forma:

1.- En pagina1.php quedaría:

Código PHP:
<SCRIPT language="Javascript">
function 
abrir_pagina() {
var 
ventana,cadena,url_tratada;
url_tratada escape(document.location.href);
cadena="pagina2.php?dest=" document.form_enviar.destino.value "&orig=" document.form_enviar.origen.value "&url=" url_tratada;
ventana=window.open(cadena,"ventana"," width=400,height=110,directories=no,location=no,me nubar=no,scrollbars=no,status=no,toolbar=no,resizable=no,left=365,top=490,screenX=0,screenY=0");
};
</SCRIPT> 
2.- La pagina2.php que recibe los datos permanece como estaba ya que cuando tomamos el parametro con
Código PHP:
$url $_GET["url"]; 
este se encuentra ya descodificado y apto para su uso.

Un placer amigos,
__________________
Lailuluelo
El error está en lo obvio
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 23:20.