E commerciale in escape nell'URL


203

Sto cercando di inviare un messaggio GET che contiene stringhe con e commerciale e non riesco a capire come sfuggire alla e commerciale nell'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, quindi ho solo bisogno dei caratteri corretti.

Non posso usare nessuna biblioteca. Come si può fare?

Risposte:


350

Devono essere codificati in percentuale:

> encodeURIComponent('&')
"%26"

Quindi, nel tuo caso, l'URL sarebbe simile a:

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

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

2
Quando sostituisco & a% 26, mostra ancora lo stesso errore--A potentially dangerous Request.Path value was detected from the client (&).
Sanjiv,

4
@Sanjiv: questo è un problema con il tuo codice, non con la codifica percentuale. Fai una domanda.
Blender,

2
@Sanjiv assicurati di sostituire prima "&" con "% 26". Vedi codice ::: NSString * message = @ "Hello Jack & Jill"; message = [message stringByReplacingOccurrencesOfString: @ "&" withString: @ "% 26"]; message = [message stringByAppendingString: @ ""]; message = [message stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
Nirav,

40

Questo non si applica solo alla e commerciale negli URL, ma a tutti i caratteri riservati . Alcuni dei quali includono:

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

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

Il luogo in cui ciò è molto utile è quando è necessario inserire un URL all'interno di un altro URL. Ad esempio, se si desidera pubblicare uno stato su Twitter:

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

Ci sono molti caratteri riservati nel mio Tweet, vale a dire ?'():/, quindi ho codificato l'intero valore del statusparametro URL. Ciò è utile anche quando si utilizzano mailto:collegamenti che hanno un corpo o un oggetto del messaggio, poiché è necessario codificare i parametri bodye subjectper mantenere intatte le interruzioni di linea, le e commerciali, ecc.

Quando un personaggio del set riservato (un "carattere riservato") ha un significato speciale (uno "scopo riservato") in un determinato contesto e uno schema URI dice che è necessario usare quel personaggio per qualche altro scopo, quindi il personaggio deve essere codificato in percentuale. La codifica in percentuale di un carattere riservato comporta la conversione del carattere nel corrispondente valore di byte in ASCII e la rappresentazione di quel valore come 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, viene in genere convertito nella sua sequenza di byte in UTF-8, quindi ogni valore di byte è rappresentato come sopra.) Il carattere riservato "/", ad esempio, se utilizzato nel "percorso" componente di un URI, ha il significato speciale di essere un delimitatore tra segmenti di percorso. Se, secondo un determinato schema URI, "/" deve trovarsi in un segmento di percorso, i tre caratteri "% 2F" o "% 2f" devono essere utilizzati nel segmento anziché un "/" non elaborato.

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


4
Tra l'elenco sopra, ! ' ( ) *non sono codificati URL utilizzando encodeURIComponent.
Amil Waduwawara,

c'è una funzione php urlencode che risolve questo problema: utilizzo $ escapedfilename = urlencode ($ nomefile);
Jeremy Young,


3

Puoi utilizzare il carattere% per "sfuggire" ai caratteri non consentiti negli URL. Vedi [RFC 1738].

Una tabella di valori ASCII su http://www.asciitable.com/ .

Puoi vedere &26 in esadecimale, quindi hai bisogno di M% 26M.


2

Questo può aiutare se qualcuno lo desidera in PHP

$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);


1

Vorrei aggiungere un commento secondario sulla soluzione Blender.

Puoi fare quanto segue:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M');

Che produce:

http://example.com?candy_name=M%26M

Il bello di questo non funziona solo per & ma per qualsiasi personaggio speciale.

Per esempio:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M?><')

Uscite:

"http://example.com?candy_name=M%26M%3F%3E%3C"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.