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!

È stato utile?

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.

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