UrlEncode - Javascript vs. C # [duplicato]
-
21-08-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Ho un URL che richiede alcuni parametri. I valori di questi parametri possono essere accentuati caratteri, così ho assolutamente bisogno di UrlEncode loro. Stranamente, vedo una differenza tra il comportamento o Javascript e .NET.
Facciamo finta che cerco di UrlEncode la parola "elefante". In JavaScript (Secondo questo sito http://www.albionresearch.com/misc/urlencode.php ), ottengo il seguente:% E9l% E9phant. Questo sembra corretto per me. Tuttavia, in .NET con questa chiamata (System.Web.HttpUtility.UrlEncode ( "elefante")) ho "% c3% a9l% c3% a9phant". Cosa c'è di sbagliato? Che cosa mi manca? Cosa devo fare se voglio ottenere% E9l% E9phant in .NET?
Grazie!
Soluzione
System.Web.HttpUtility.UrlEncode utilizzerà UTF8 (credo ..) come encoder di default, è possibile modificare questo che soddisfino uno ..
System.Web.HttpUtility.UrlEncode("éléphant", Encoding.Default); // %e9l%e9phant
Anche se può essere preferibile specificare una tabella codici reale o cosa no, invece di basarsi sul sistema operativo predefinito.
Altri suggerimenti
In JavaScript (in base a questo sito web: http://www.albionresearch.com/misc/ urlencode.php ), ottengo il seguente:% E9l% E9phant.
Questa pagina è sbagliato. JavaScript inoltre usa UTF-8, come .NET fa per impostazione predefinita. Provate voi stessi:
javascript:alert(encodeURIComponent('éléphant'))
%C3%A9l%C3%A9phant
URL oggi sono UTF-8. Non cercare di utilizzare CP1252 più. UTF-8 è tuo amico. Fiducia UTF-8!
Riferimento:
js: %E9 l %E9 phant
.net: %c3 %a9 l %c3 %a9 phant
La differenza è che uno è la codifica UTF-8
URL mentre l'altra ti dà la ANSI
URL Encoding.
In .NET, provare:
Dim a As String = System.Web.HttpUtility.UrlEncode( _
"éléphant", _
Text.Encoding.Default)
ho
%e9 l %e9 phant
come risultato. Che corrisponde alla stringa che hai fornito per JavaScript, fatta eccezione per il caso Hex caratteri.
Encoding.Default funziona solo per voi, se tabella codici corrente del sistema è impostato su Europa occidentale. Ora questo potrebbe essere importante se il Javascript è in corso anche sulla stessa macchina del codificatore .NET, ma se non, allora è possibile forzare la pagina di codice a quello dell'Europa occidentale:
System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252));
Si potrebbe anche provare base64 loro codifica.
C'è un precedente post che si occupa di farlo in JavaScript.
Per quanto riguarda in .NET, ci sono molti esempi che mostrano come farlo. Ecco quello che ho trovato off Google .
Naturalmente, le stringhe potrebbero essere un po 'più grande urlencoding. Tuttavia, essi saranno offuscati, che può essere un vantaggio a seconda dell'applicazione.