2011-10-17 13 views
20

Ho un problema con caratteri speciali come &, A, ecc e loro HTML corrispondente scrittura codificata come &, ä eccJavaScript/jQuery codifica per i caratteri speciali utilizzando val()

  • Quando vengono utilizzati nell'etichetta del valore dei campi di input, il browser la decodifica automaticamente, nessun problema.

  • Quando si utilizza la funzione jQuerys val(), il browser non ha alcuna possibilità di valutare correttamente il contenuto

    $("button").click(function(){ 
        $("#test").val("&"); 
    }); 
    

Qualche idea?

+1

Non c'è in realtà alcuna codifica o decodifica in corso quando si utilizza il metodo 'val'. Se hai un valore iniziale nel campo, viene decodificato quando viene analizzato l'HTML, non quando viene letto il valore. Perché dovresti usare i valori codificati HTML qui in primo luogo? – Guffa

+0

Perché voglio inserire i dati nei campi di input dinamicamente (in base a una casella di selezione a discesa, in cui selezionare il set di dati). E i dati inseriti qui devono essere sicuri XSS. – 1jr

+0

Stai sbagliando. L'uso di alcune codifiche arbitrarie non rende il codice più sicuro ma meno, dovresti codificare il valore correttamente per come verrà utilizzato. Se metti il ​​testo in una stringa letterale, dovrebbe essere codificato a tale scopo, non codificato in HTML. – Guffa

risposta

4

Prova .html() funzione:

$("#test").html("&"); 
30

È possibile utilizzare questa secolare decodifica entità trucco:

$("button").click(function(){ 
    $("#test").val($("<div>").html("&amp;").text()); 
}); 

demo di lavoro: http://jsfiddle.net/AndyE/XegGy/

crea un temporaneo <div> element, imposta il codice HTML su &amp; e ottiene il valore di testo, che sarà &.