Domanda

Quali caratteri sono consentiti nei parametri GET senza codificarli o eseguirne l'escape?Intendo qualcosa del genere:

http://www.example.org/page.php?name=XYZ

Cosa puoi avere lì al posto di XYZ?Penso solo ai seguenti personaggi:

  • a-z (A-Z)
  • 0-9
  • -
  • _

Questo è l'elenco completo o sono consentiti caratteri aggiuntivi?

Spero che puoi aiutarmi.Grazie in anticipo!

È stato utile?

Soluzione

Ci sono caratteri riservati, che hanno significati riservati, quelli sono delimitatori — :/?#[]@ — e sottodelimitatori — !$&'()*+,;=

C'è anche un set di caratteri chiamato caratteri senza riserve — caratteri alfanumerici e -._~ - che non devono essere codificati.

Ciò significa che tutto ciò che non appartiene al set di caratteri non riservati dovrebbe essere codificato in %, quando non hanno un significato speciale (ad es.quando passato come parte di GET parametro).

Guarda anche RFC3986:Identificatore uniforme delle risorse (URI):Sintassi generica

Altri suggerimenti

La domanda chiede quali personaggi sono consentito nei parametri GET senza codificarli o eseguirne l'escape.

Secondo RFC3986 (sintassi generale dell'URL) e RFC7230, sezione 2.7.1 (Sintassi URL HTTP/S) gli unici caratteri che devi codificare in percentuale sono quelli esterni a domanda impostare, vedere la definizione di seguito.

Tuttavia, ci sono specifiche aggiuntive come HTML5, Moduli Web e la ricerca indicizzata obsoleta, Raccomandazione del W3C.Questi documenti aggiungono un significato speciale ad alcuni caratteri, in particolare a simboli come = & + ;.

Altre risposte qui suggeriscono che la maggior parte dei caratteri riservati dovrebbe essere codificata, incluso "/" "?".Non è corretto.Infatti, RFC3986, sezione 3.4 sconsiglia la codifica percentuale dei caratteri "/" "?".

A volte è meglio per l'usabilità evitare la percentuale: codificare quei personaggi.

RFC3986 definisce il componente di query come:

query       = *( pchar / "/" / "?" )
pchar       = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~" 

Un meccanismo di codifica percentuale viene utilizzato per rappresentare un ottetto di dati in un componente quando il carattere corrispondente di quell'ottetto è al di fuori del set consentito o viene utilizzato come delimitatore o all'interno del componente.

La conclusione è che la parte XYZ dovrebbe codificare:

special: # % = & ;
Space
out of query set: [ ]
non ASCII encodable characters

Salvo simboli speciali = &;Sono chiave=valore separatori.

La codifica di altri caratteri è consentita ma non necessaria.

RFC 1738 su cui caratteri sono ammessi in URL:

  

Solo caratteri alfanumerici, i caratteri speciali "$ -_. + * '()," E      caratteri riservati utilizzati per i loro scopi riservati possono essere utilizzati      non codificato all'interno di un URL.

I caratteri riservati sono ";", "/", ":", "@", "=" e "&", il che significa che avrebbe bisogno di URL in codice, se si desidera utilizzarli "?" .

caratteri alfanumerici e tutti

~ - _ . ! * ' ( ) ,

sono validi all'interno di un URL.

Tutti gli altri caratteri devono essere codificati.

ho fatto un test utilizzando la barra degli indirizzi di Chrome e di una $QUERY_STRING in bash, e osservato quanto segue:

~!@$%^&*()-_=+[{]}\|;:',./? e grave (backtick) sono passati attraverso in testo semplice.

, ", < e > vengono convertiti in %20, %22, %3C e %3E rispettivamente.

# viene ignorato, dal momento che viene utilizzato da Ye Olde ancoraggio .

Personalmente, direi che stringere i denti e codificare con Base64:)

Tutte le norme relative alla codifica delle URI (che contiene URN e URL) sono specificati nel RFC1738 e RFC3986, ecco una TL; DR di questi documenti lunghe e noiose:

percentuale di codifica, noto anche come codifica URL, è un meccanismo per codificare informazioni in un URI in determinate circostanze. I caratteri consentiti in un URI sono o riservati o senza riserve. caratteri riservati sono quei personaggi che a volte hanno un significato speciale, ma non sono gli unici personaggi che ha bisogno di codifica.

Ci sono 66 caratteri senza riserve che non hanno bisogno di qualsiasi codifica: abcdefghiklmopqrstuvwABCDEFGHIKLMOPQRSTUVWXYZ0123456789-_.~

Ci sono 18 caratteri riservati che deve essere codificata: !*'();:@&=+$,/?#[], e tutti gli altri personaggi devono essere codificati

.

Per cento-codificare un carattere, è sufficiente concatenare "%" e il suo valore ASCII esadecimale. Le funzioni PHP "URLEncode" e "rawurlencode" fanno questo lavoro per voi.

"." | "!" | "~" | "*" | "'" | "(" | ")" sono anche accettabili [RFC2396] . In realtà, tutto può essere in un parametro GET se è correttamente codificato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top