2013-05-18 12 views
119

Sto tentando di inviare un messaggio GET che contiene stringhe con la e commerciale e non riesco a capire come sfuggire la e commerciale nell'URL.escaping e commerciale in url

Esempio:

http://www.example.com?candy_name=M&M 
result => candy_name = M 

Ho anche provato:

http://www.example.com?candy_name=M\&M 
result => candy_name = M\\ 

Sto usando gli URL manualmente in modo ho solo bisogno i caratteri corretti.

Non riesco a utilizzare alcuna libreria. Come può essere fatto?

risposta

219

Hanno bisogno di essere cento codificato:

> encodeURIComponent('&') 
"%26" 

Quindi nel tuo caso, l'URL sarà simile:

http://www.mysite.com?candy_name=M%26M 
+1

: -% 26 non funziona per me. C'è un'altra soluzione.? – Sanjiv

+0

@Sanjiv: cosa intendi con "non funziona"? – Blender

+1

Quando sostituisco & su% 26, mostra ancora lo stesso errore-- 'È stato rilevato un valore Request.Path potenzialmente pericoloso dal client (&).' – Sanjiv

5

Prova utilizzando http://www.mysite.com?candy_name=M%26M.

Vedi anche questo reference e un po 'più informazioni wikipedia.

2

È possibile utilizzare il carattere% per "escape" caratteri non consentiti negli URL. Vedi RFC1738.

una tabella di valori ASCII è qui: http://www.asciitable.com/

potete vedere & è 26 in esadecimale - quindi quello che vi serve è M% 26M

27

Questo non applicano solo per la e commerciale negli URL , ma a tutti reserved characters. Alcuni dei quali comprendono:

# $ & + ,/: ; = ? @ [ ] 

L'idea è la stessa come codificante un & in un documento HTML, ma il contesto è cambiato per essere all'interno della URI, oltre ad essere all'interno del documento HTML. Pertanto, la codifica percentuale impedisce problemi di analisi all'interno di entrambi i contesti.

Il luogo in cui questo è utile è quando è necessario inserire un URL all'interno di un altro URL. Ad esempio, se si desidera inviare uno status su Twitter:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com) 

c'è un sacco di caratteri riservati nel mio Tweet, vale a dire ?'():/, così ho codificato l'intero valore del parametro status URL. Ciò è utile anche quando si utilizzano i collegamenti mailto: con corpo o oggetto del messaggio, poiché è necessario codificare i parametri body e subject per mantenere intatte le interruzioni di riga, la e commerciale, ecc.

Quando un personaggio dal set riservata (un "personaggio riservato") ha significato speciale (uno "scopo riservato") in un certo contesto, e uno schema URI dice che è necessario utilizzare quel personaggio per qualche altro scopo , il carattere deve essere codificato in percentuale.Codifica percentuale un carattere riservato comporta la conversione del carattere nel suo valore di byte corrispondente in in ASCII e quindi che rappresenta tale valore come una coppia di cifre esadecimali. Le cifre, precedute da un segno di percentuale ("%") che viene utilizzato come carattere di escape, vengono quindi utilizzate nell'URI al posto del carattere riservato. (Per un carattere non ASCII, è convertito in genere nella sua sequenza di byte in UTF-8 e quindi ogni valore di byte è rappresentato come sopra.) Il carattere riservato "/", per esempio , se utilizzato nel " percorso "di un URI, ha il significato speciale di di essere un delimitatore tra i segmenti del percorso. Se, in base a uno schema URI fornito da , "/" deve trovarsi in un segmento di percorso, è necessario utilizzare i tre caratteri "% 2F" o "% 2f" nel segmento anziché "/".

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

+2

Tra l'elenco precedente, '! '() * 'non sono codificati URL usando' encodeURIComponent'. –

0
// this may help if someone want by php 
$variable ="candy_name=M&M"; 
$variable = str_replace("&","%26",$variable);