> Faqs > Problemas con variables pasadas en la URL en algunos caracteres.

Problemas con variables pasadas en la URL en algunos caracteres.

Mi problema es el siguiente:

Quiero pasar por URL algunos datos que tienen caracteres especiales que no se pasan correctamente por la URL. Por ejemplo, si quiero pasar una variable por url que contiene espacios, sólo recibo la variable hasta el primer espacio.

Me explico con un ejemplo: necesito pasar variables por URL pero en el primer caracter en blanco que hay en la cadena que tengo que pasar se corta todo y pasa solo hasta lo que habia antes de ese caracter por ejemplo quiero pasar esto

 $var1="primero";   
 $var2="aqui es el problema";   
 $var3="ultimo";   
 <a href="receptor.php?variable1=$var1&variable2=$var2&variable3=$var3">enlace</a>   

Y lo que sucede es que solo pasa $var1 y la primera palabra de $var2.

Este problema solo lo tengo cuando lo ejecuto sobre linux puesto que lo hice en Windows y no hay problema alguno. Quiza sea algo que haya que configurar

Respuestas

Efectivamente, al pasar un parámetro por URL, existen problemas con ciertos valores de los parámetros. Por ejemplo, si un texto que queremos pasar contiene espacios, o símbolos como "+", no lo recibiremos correctamente, a no ser que hagamos algo:

Tienes que codificar la variable a formato URL antes de ponerla en el enlace. Si codificas la variable los caracteres problemáticos (como los espacios) serán cambiados por otros que no te darán problemas. Para ello tienes que utilizar la función de PHP urlencode().

Por ejemplo, mira este código PHP para pasar un par de datos conflictivos por URL:

<a href="mipag.php?var1=<?php echo urlencode("mi valor 1");?>&var2=<?php echo urlencode("otro+valor%raro.en\*url");?>">   
 Enlace con paso de variables   
</a>

Este código PHP generará la siguiente salida HTML, donde podemos apreciar cómo se han convertido los caracteres raros en códigos que se pueden pasar correctamente por la URL:

<a href="mipag.php?var1=mi+valor+1&var2=otro%2Bvalor%25raro.en%2Aurl">   
 Enlace con paso de variables   
</a>

Entonces se podrán recibir los datos en la página a la que se dirige el enlace, como de costumbre:

 echo $_GET["var1"];   
 echo $_GET["var2"];

Las varibles que se reciben ya tiene decodificada la URL, es decir, con los caracteres tal como queremos recibirlos, no por los códigos específicos de la URL.

Puedes encontrar información sobre esa función en la propia página de PHP: Documentación de la función urlencode

Miguel Angel
3295 146 215 17
Muchas Gracias! estuve bastante rato tratandoo de solucionarlo y me ayudaste enormemente Una duda antigua pero la respuesta sigue siendo de mucha utilidad.