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...

La FAQ Problemas con variables pasadas en la URL en algunos caracteres. tiene

Pertenece a la categoría:
Pregunta
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

Respuesta de Miguel Angel Alvarez
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=<?echo urlencode("mi valor 1");?>&var2=<?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:
http://www.php.net/manual/es/function.urlencode.php

Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Jorge Montes de Oca

17/4/2007
<a href="aplicacion.php?user=<?echo urlencode("$usuario");?>">PASA</a>
<a href="control.php?user=$usuario">PASA</a>
<a href="seguridad.php?user='$usuario'">PASA</a>

estoy intentanto pasar el valor de una variable a tres script diferentes sin ningun exito la variable se captura en un imput tex....

alguien me puede ayudar por favor.

Carlos

25/8/2007
Si el carácter raro es unas comillas dobles, se convierte a %22 cuando usamos urlencode()

Vale, hasta aquí bien. Mi problema (que me está volviendo loco) es al obtener ese parámetro URL en el script de destino. Me explico:

Imaginen una web que imprime por la pantalla lo que se ha recibido por un parámetro URL llamado "nombre":

<?php
echo $_REQUEST["nombre"];
?>

Supongamos que el script se llama "saludar.php". Bien, si el parámetro nombre tiene caracteres alfanuméricos, espacios, etc. todo va bien.

Pero si el parámetro nombre tiene comillas, entonces el script saludar.php automáticamente "escapa" el nombre y delante de cada comilla añade la barra invertida. Es decir, el contenido del parámetro nombre se cambia automáticamente!!!

Pruébenlo poniendo en el navegador la siguiente URL:

http://localhost/saludar.php?nombre="pepe"

saludar.php debería imprimir "pepe" por pantalla (con las comillas), pero sin embargo imprime "pepe". Y no es un problema de echo o print, ya que si hacemos un srtlen($_REQUEST["nombre"]) resulta que nos devuelve 8 caracteres en vez de 6!!!

Esto no ocurre en otros lenguajes como JSP. ¿Qué solución existe para que al tomar un parámetro URL automáticamente el PHP no me lo "escape"?

Muchas gracias por vuestra inestimable ayuda y por vuestro tiempo.

lourdes

07/2/2010
GRACIAS
muchisimas gracias, me quito un gran problema de encima el "urlencode()"
sigan ayudando a la gente (Y)

javier

19/2/2010
Error al mostrar las variables
tengo el siguiente codigo:


$consulta = "select * from calendario_teniente where fecha = '$FechaMySQL' and hora ='$hora'";

$resultado = mysql_query($consulta);

$row = mysql_fetch_array($resultado);




?>
<form action="modif_ok2.php" method="post" class="Estilo3">
<table border=1>
<tr><td><span class="Estilo3 Estilo6 Estilo5 Estilo4"><span class="Estilo7">Fecha: </span></span></td>
<td><span class="Estilo6">
<input name=fecha type=text id="fecha" size=10 maxlength=10 value=<?php echo $fecha?> >
<br>
</span></td>
</tr>

<tr>
<td><span class="Estilo3 Estilo6 Estilo5 Estilo4"><span class="Estilo7">Hora: </span></span></td>
<td><span class="Estilo6">
<input name=hora type=text id="hora" size=6 maxlength=6 value=<?php echo $hora ?>>
<span class="Estilo8">(hh:mm)</span><br>
</span></td>
</tr>

<tr>
<td><span class="Estilo3 Estilo6 Estilo5 Estilo4"><span class="Estilo7">Asunto: </span></span></td>
<td><span class="Estilo6">
<input name=asunto type=text id="asunto" size=100 maxlength=200 value=<?php echo urlencode($row["asunto"]) ?>>
<br>
</span></td>
</tr>

<tr>
<td><span class="Estilo3 Estilo6 Estilo5 Estilo4"><span class="Estilo7">Persona: </span></span></td>
<td><span class="Estilo6">
<input name=persona type=text id="persona" size=100 maxlength=200 value=<?php echo urlencode($row["persona"]) ?>>
<br>
</span></td>
</tr>

<tr>
<td><span class="Estilo3 Estilo6 Estilo5 Estilo4"><span class="Estilo7">Lugar: </span></span></td>
<td><span class="Estilo6">
<input name=lugar type=text id="lugar" size=100 maxlength=200 value=<?php echo urlencode($row["lugar"]) ?>>
<br>
</span></td>
</tr>

<td colspan=2 class="Estilo6"><input name="Aceptar" type=submit id="Aceptar" value="Aceptar"></td>
</table>
<p class="Estilo1">&nbsp;</p>
</form>


¿Como puedo eliminar los simbolos mas que salen en las casillas input?

ale

14/5/2010
no decodifica
buscando soluciones llegue aca, y puedo asegurar que el $_GET no decodifica el string primeramente codificado con urlencode()

Jorge

25/11/2011
Problemas con & a la hora de pasar variables de un .html a un .php
Mi problema es el siguiente. intentando pasar 2 o mas variables de un .html los coloco de la siguiente forma

<a href="receptor.phpvariable1=$var1&variable2=$var2&variable3=$var3">enlace</a>

pero siempre me da error al leerlos en el .php

<?
echo "Variable $variable1: $HTTP_GET_VARS["variable1"] <br>n";
echo "Variable $variable2: $HTTP_GET_VARS["variable2"] <br>n"
echo "Variable $variable3: $HTTP_GET_VARS["variable3"] <br>n"
?>

estoy utilizando un editor de códigos llamados texmate. y e probado con aptana. pero siempre me hace la referencia de que el problema esta en "&" que une las variables.

agradezco su ayuda.

Yluvatar

04/8/2012
Otra solución.
En lo personal, a veces, dependiendo de la información a traspasar, utilizo el base64_encode.

Por ejemplo para pasar un consulta sql completa, la paso de esa forma.

Saludos.

Asdrubal

26/7/2013
Pasar espacios en blanco por URL en JSP
Paso 1: En la Pagina1.jsp
<%@ page language="java" import="java.sql.*,java.net.*" %>

<%
// Codigo de prueba para pasar string en Blanco en JSP...
String encode = "";
//encode = URLEncoder.encode(tn.getString("profesionTestigo"), "UTF-8");
// out.println ("<input type=hidden name=Prueba value="+ encode+ ">");
// fin de codigo de prueba ..

%>
En la pagina.2. jsp

<%@ page language="java" import="java.sql.*,java.net.*" %>
<%


String decode = "";
String pp = (String) request.getParameter("Prueba");
decode = URLDecoder.decode(pp, "UTF-8");
out.println ("El Dato Solicitado es: " + decode);

%>
FAQ relacionadas

Para ver más FAQ relacionadas accede a las categorías:

Volver al árbol de categoríasVolver al árbol de categorías