La codificación de la URL de la variable $_GET ignora el carácter "&" de ampersand

Así que estoy tratando de obtener una URL de la barra de direcciones que se vea así:

http://mysite.com/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false

Estoy usando la variable $_GET para leerla directamente desde la URL, mi código es el siguiente

$arc = rawurlencode($_GET['name']);
echo "URL: $arc";

Esto solo vuelve

URL: http://imgur.com/format.jsp?id=738ths3

Falta el &secure=false

Lo que quiero que se vea:

 URL: http://test.com/format.jsp?id=738ths3&secure=false

Probé urlencode, rawurlencode sin éxito, busqué en Google varios foros y stackoverflow ninguna de las respuestas ayudó, ¿alguna idea? ¡Gracias!

urlencode muestra esto:

URL: http%3A%2F%2Ftest.com

¡así que tampoco puedo tener eso!

preguntado el 28 de julio de 12 a las 05:07

El problema que está viendo aquí es que el nombre es uno de los parámetros GET y seguro es el otro. Por lo tanto, su solicitud tendría que estar codificada en rawurlen ANTES de ser enviada como solicitud, no DESPUÉS. -

3 Respuestas

Necesitarás urlencode() antes de construir la URL, es decir:

$url = "http://mysite.com/url.php?name=".urlencode('http://test.com/format.jsp?id=738ths3&secure=false');

De esta forma, podrá obtener la URL completa como name OBTENER parámetro de $_GET['name'].

Explicación:

Sin urlencode() al construir la URL, PHP lo trataría como 2 parámetros separados, separados por &:

  1. $_GET['name']
    cual es http://imgur.com/format.jsp?id=738ths3 para tu caso

  2. $_GET['secure']
    cual es false para tu caso

Alternativamente:

Según su comentario, parece que no tiene control sobre la construcción de la URL. Puedes obtener el completo $_GET en una sola cadena usando http_build_query:

$name = http_build_query($_GET);

Entonces obtendrías:

echo $name; // name=http://test.com/format.jsp?id=738ths3&secure=false

// which you would then may want to strip away the first 'name='
$name = substr($name, strlen('name='));

echo $name; // to obtain http://test.com/format.jsp?id=738ths3&secure=false

Respondido el 20 de junio de 20 a las 10:06

¿Cómo puedo obtener la URL de la barra de direcciones e ingresarla en .urlencode()? sin usar &_GET? - user1294097

Si construyó la URL, debe hacerlo correctamente. De lo contrario, puede obtener los 2 por separado $_GET parámetros y péguelos de nuevo. - uzyn

Edité mi respuesta para mostrar cómo puede obtener todos los parámetros en una sola cadena usando http_build_query(). - uzyn

También podrías usar $_SERVER['QUERY_STRING'] en lugar de parse_url() ya que lo está tratando como una cadena y no como una matriz. - muebles nuevos

Después de revisar mi código durante horas y horas (soy nuevo en php y programación), ¡me di cuenta de que tengo control sobre la construcción de URL! ¡Hice el primer paso y urlencode durante la construcción y funciona! muchas gracias- user1294097

La URL original, http://mysite.com/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false, contiene dos parámetros de cadena de consulta: name y secure. & en la cadena de consulta pertenece a la ser completados URL, no la URL en el name parámetro.

Si tiene control sobre este valor, al declarar el enlace/URL, use PHP urlencode() para codificar el valor del nombre completo, como:

$url = "http://mysite.com/url.php?name=" . urlencode("=http://test.com/format.jsp?id=738ths3&secure=false");

Esto codificará correctamente el name parámetro y su $arc = $_GET['name']; funcionará como se desee.

Si no tiene control sobre la configuración del valor y simplemente está analizando algo que está recibiendo, puede dividir la cadena dada en el name= parámetro y asumir todo lo demás después de que sea parte de name:

$splitQuery = split('name=', $_SERVER['REQUEST_URI']);
$arc = $splitQuery[1];

Para decodificar la URL codificada, después de haber accedido a ella, use PHP urldecode():

$arc = urldecode($_GET['name']); // assuming you're properly encoding the `name` parameter

Respondido 28 Jul 12, 05:07

Si no puede codificar la URL, puede obtener la URI actual con este código:

$url = $_SERVER["REQUEST_URI"];

que en tu caso, la $url es:

/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false

Luego puede dividirlo con explotar y validarlo y tomar los parámetros GET de él.

Respondido 28 Jul 12, 05:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.