2012-08-16 7 views
5

Dire Chiedo questo URL:

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

$ _GET [ 'var'] sarà ora: "2 2" dove dovrebbe essere "2 + 2"

Ovviamente ho potuto codificare il dati prima dell'invio e poi decodificarlo, ma mi chiedo se questa è l'unica soluzione. Potrei anche sostituire gli spazi con i simboli più, ma voglio anche consentire gli spazi. Voglio semplicemente che qualsiasi personaggio sia passato, senza alcuna decodifica o codifica di URL in corso. Grazie!

+1

Perché non codificare e decodificare? –

+0

Potresti semplicemente prendere '$ _SERVER [" QUERY_STRING "]' - Penso che ti dia il testo non elaborato? – andrewsi

+2

perché non dovresti codificare? La strada da percorrere IS per la codifica url quindi assomiglierà a var = 2% 202 (dove 20 è un numero come quello che sarà il numero reale che rappresenta il segno +). E php ha costruito le funzioni per decodificare! –

risposta

4

Naturalmente. È possibile leggere $_SERVER["QUERY_STRING"], scomporlo da solo e quindi rinunciare alla normale decodifica dell'URL oppure convertire solo i segnaposto %xx.

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

(Esempio funziona solo per i parametri alfanumerici, e non fa la decodifica% xx menzionato. Basta rompe l'ingresso grezzo.)

+0

'parse_str()' forse? –

+0

Nessun flag per impedire la urldecoding sui valori param. – mario

+0

I dati di cui ho bisogno sono infatti in $ _SERVER ["QUERY_STRING"], ma l'analisi è il problema. @webarto parse_str() converte i plus negli spazi – user353885

2

Si potrebbe utilizzare urlencode, anche se questo sarebbe anche tradurre gli spazi per un plus. Questo ha senso, perché un + in un URL di solito rappresenta uno spazio. Se in realtà hai bisogno di un segno più per indicare un segno più, dovresti probabilmente sfuggire all'input. Ciò significa che un + diventerebbe %2B e il tuo URL sarebbe http://mydomain.com/script.php?var=2%2B2.

+0

Questo è quello che intendevo codificandolo - Sto cercando di trovare una soluzione più carina di tutti quei simboli di% libbra e così i link sembrano migliori quando si passa in giro. – user353885

1

Chi sta generando l'URL contenente uno + nel segmento di query è errato a meno che non intenda rappresentare un carattere di spazio. Un + nella query è un carattere riservato (codice: RFC2396 §3.4). Se è necessario inserire un valore letterale + nella stringa di query, è necessario codificarlo come %2B (codice: 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

Per riferimento futuro si può fare il simbolo '+' apparire su una richiesta GET senza la necessità inviare l'URL con i simboli codificati.

PHP Version 5.3.8 

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

Echo:

2+2 

utilizzando il seguente codice:

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

Questo è in realtà sbagliato, poiché l'invio di '2% 202' risulterà lo stesso invece di' 2 2' –

0

A pochi passi necessari per farlo.

  • Basta sostituire il tuo parametro di query più (+) segno con '% 2B' nell'URL prima di richiedere l'url.

  • Ora sarà sufficiente recuperare il parametro di query. Sarà sostituire automaticamente '% 2B' con il segno più.

0

ho appena usato per urlencode() - bene - codificare l'URL e urldecode($_Get()) per rendere la stringa utilizzabile di nuovo.