2012-02-23 16 views
15

Sto provando a scrivere un codice JavaScript helper MVC3 personalizzato per il mio progetto e uno dei metodi deve eseguire il escape delle stringhe C# in stringhe JavaScript.Avvertenze Codifica di una stringa C# su una stringa Javascript

So che le stringhe C# sono UTF-16 encoded e le stringhe di Javascript also seem to be UTF-16. Nessun problema qui.

So che alcuni personaggi come backslash, apici singoli o doppi apici devono essere backslash escape Javascript così:

\ becomes \\ 
' becomes \' 
" becomes \" 

C'è qualche altro avvertimento devo essere a conoscenza prima di scrivere il mio metodo di conversione?

MODIFICA: Grandi risposte finora, sto aggiungendo alcuni riferimenti dalle risposte nella domanda per aiutare gli altri in futuro.

Alex K. suggested using System.Web.HttpUtility.JavaScriptStringEncode, che ho segnato come la risposta giusta per me, perché sto utilizzando .Net 4. Ma questa funzione non è disponibile per le versioni precedenti .Net, quindi sto aggiungendo alcune altre risorse qui:

CR becomes \r // Javascript string cannot be broke into more than 1 line 
LF becomes \n // Javascript string cannot be broke into more than 1 line 
TAB becomes \t 

Control characters must be Hex-Escaped 

JP Richardson ha fornito un collegamento interessante che informa che Javascript utilizza UCS-2, che è un sottoinsieme di UTF-16, ma come codificarlo correttamente è una domanda completamente nuova.

LukeH sui commenti sottostanti ha richiamato i caratteri CR, LF e TAB e ciò mi ha ricordato i caratteri di controllo (BEEP, NULL, ACK, ecc.).

+1

Non dimenticare di codificare newline, schede e altri caratteri speciali. ['JavaScriptStringEncode'] (http://msdn.microsoft.com/en-us/library/system.web.httputility.javascriptstringencode.aspx), [come suggerito da Alex] (http://stackoverflow.com/a/ 9413664/55847), gestirà quello per voi. – LukeH

risposta

29

(.net 4) È possibile;

System.Web.HttpUtility.JavaScriptStringEncode(@"aa\bb ""cc"" dd\tee", true); 
== 
"aa\\bb \"cc\" dd\\tee" 
+1

Bello! Sto usando MVC3 con .Net 4, quindi questo è molto utile! – Machado

+0

Qual è la soluzione per gli utenti di .net versione <4? –

+0

come decodificare? – MonsterMMORPG

1

E 'la mia comprensione che non c'è bisogno di essere attenti, come JavaScript non è UTF-16, invece, è UCS-2 che credo è un sottoinsieme di UTF-16. Ciò che questo significa per te, è che qualsiasi carattere rappresentato rispetto a un punto di codice superiore di 2 byte (0xFFFF) potrebbe darti problemi in JavaScript.

In sintesi, sotto le copertine, il motore può utilizzare UTF-16, ma espone solo metodi simili a UCS-2.

Grande articolo sul tema: http://mathiasbynens.be/notes/javascript-encoding

+0

Quindi, come possiamo trasformare in modo sicuro il C# UTF-16 in UCS-2 per codificare la stringa nel modo giusto? – Machado

0

Invece di utilizzare JavaScriptStringEncode() metodo, è possibile codificare lato server utilizzando:

HttpUtility.UrlEncode() 

Quando è necessario leggere il lato client stringa codificata, è necessario chiama la funzione javascript unescape() prima di utilizzare la stringa.

+1

Perché sceglieresti di farlo in questo modo? – Casey

+0

La mia stringa non è URL, perché uso UrlEncode. Sembra sciocco. Ma credo che funzionerà. – Gqqnbig

Problemi correlati