2012-08-16 15 views
5

decir te pido esta URL:

http://mydomain.com/script.php?var=2+2

$ _GET [ 'var'] ahora será: "2 2" donde debe estar "2 + 2"

Obviamente, podría codificar el datos antes de enviarlos y luego descifrarlos, pero me pregunto si esta es la única solución. También podría reemplazar espacios con símbolos más, pero también quiero permitir espacios. Simplemente quiero que pasen los caracteres, sin que se produzca ninguna codificación o codificación de URL. ¡Gracias!

+1

¿Por qué no codificar y decodificar? –

+0

Podrías tomar '$ _SERVER [" QUERY_STRING "]' - Creo que eso te da el texto en bruto? – andrewsi

+2

¿por qué no codificaría la URL? El camino a seguir IS a la codificación de la URL para que se vea como var = 2% 202 (donde 20 es un número como ese será el número real que representa el signo +). ¡Y php ha incorporado funciones para decodificar! –

Respuesta

4

Por supuesto. Puede leer $_SERVER["QUERY_STRING"], dividirlo usted mismo, y luego renunciar a la decodificación de URL habitual, o solo convertir %xx marcadores de posición atrás.

preg_match_all('/(\w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $pairs); 
$_GET = array_combine($pairs[1], $pairs[2]); 

(Ejemplo sólo funciona para los parámetros alfanuméricos, y no hace la decodificación% xx mencionado. Sólo se rompe la entrada bruta.)

+0

'parse_str()' maybe? –

+0

No tiene indicador para evitar la codificación url en los valores de param. – mario

+0

La información que necesito es, de hecho, en $ _SERVER ["QUERY_STRING"], pero analizarla es el problema. @webarto parse_str() convierte las ventajas en espacios – user353885

2

Usted podría utilizar urlencode, sin embargo, que también se traduciría espacios a un plus Esto tiene sentido, porque un + en una URL generalmente representa un espacio. Si realmente necesita un signo más para significar un signo más, probablemente debería escapar de la entrada. Esto significa que + se convertiría en %2B y su URL sería http://mydomain.com/script.php?var=2%2B2.

+0

Eso es lo que quise decir al codificarlo - Estoy tratando de encontrar una solución de aspecto más lindo que todos esos símbolos% libra y tal que los enlaces se vean mejor al pasar por ahí. – user353885

1

Quien está generando la URL que contiene un + en el segmento de consulta es incorrecta a menos que intenten representar un carácter de espacio. Un + en la consulta es un carácter reservado (re: RFC2396 §3.4). Si necesita insertar un literal + en la cadena de consulta, debe codificarse como %2B (re: RFC2396 §2.2).

5
if(strpos($_SERVER["QUERY_STRING"], "+") !== false){ 
    $_SERVER["QUERY_STRING"] = str_replace("+", "%2B", $_SERVER["QUERY_STRING"]); 
    parse_str($_SERVER["QUERY_STRING"], $_GET); 
} 
0

Para referencia futura puede hacer que el símbolo '+' aparezca en una solicitud de obtención sin la necesidad de enviar la url con símbolos codificados.

PHP Version 5.3.8 

presentación de http://mydomain.com/script.php?var=2+2

Echo:

2+2 

usando el siguiente código:

<?php 
echo urlencode($_GET['var']); 
?> 
+0

Eso es realmente incorrecto, ya que el envío de '2% 202' dará como resultado el mismo en lugar de' 2 2' –

0

Unos pasos necesarios para hacerlo.

  • basta con sustituir el parámetro de consulta signo más (+) con '% 2B' en la url antes de solicitar la url.

  • Ahora recuperará el parámetro de consulta. Omitirá automáticamente reemplazar '% 2B' con el signo más.

0

acabo de utilizar urlencode() a - bien - codificar la URL y urldecode($_Get()) para hacer que la cadena pueda volver a utilizar.

Cuestiones relacionadas