Esci dalle citazioni in JavaScript


211

Sto inviando valori da un database (non è realmente aperto all'entrata pubblica, ma è aperto all'ingresso da parte di un utente in azienda - il che significa che non sono preoccupato per XSS ).

Sto provando a generare un tag come questo:

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>

DESCRIPTION è in realtà un valore dal database che è qualcosa del genere:

Prelim Assess "Mini" Report

Ho provato a sostituire "con \", ma indipendentemente da ciò che provo, Firefox continua a interrompere la mia chiamata JavaScript dopo lo spazio dopo la parola Valutare e sta causando ogni tipo di problema.

Devo dimenticare la risposta ovvia, ma per la mia vita non riesco a capirlo.

Qualcuno ha cura di sottolineare la mia idiozia?

Ecco l'intera pagina HTML (alla fine sarà una pagina ASP.NET , ma per risolverlo ho eliminato tutto tranne il codice problema)

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
    </body>
</html>

3
È una buona idea rendere onclickdiscreto l'allegato dell'evento e spostare tutte le informazioni del database in un'isola di dati. Le cose saranno più pulite e otterrai effettivamente una sorta di errore di sintassi quando le tue stringhe sono sfuggite erroneamente.
Justin Johnson,


Puoi anche usare i metodi jquery escape ("stringa") e unescape ("stringa")
Abhiram

Risposte:


212

Devi sfuggire alla stringa in cui stai scrivendo DoEditper cancellare i caratteri tra virgolette doppie. Stanno causando la onclickchiusura prematura dell'attributo HTML.

L'uso del carattere di escape JavaScript \, non è sufficiente nel contesto HTML. È necessario sostituire la doppia citazione con il corretto rappresentazione entità XML, &quot;.


Giusto, ma non sarebbe questo? <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;"> modifica </a> l'ho provato e continua a rovinare. Questo deve essere un WTF semplice ma per la mia vita non riesco a vederlo.
Matt Dawdy,

Esiste una funzione JavaScript integrata che sfuggirebbe alle doppie virgolette? A parte 'quo "'. Replace ('"', '& quot;') Non riesco a trovare nulla.
Kevin

4
Non è un problema javascript, è un problema di codifica HTML / XML: non puoi avere caratteri di virgolette doppie all'interno di un valore di attributi senza sfuggirli ... altrimenti browser / parser pensano che stai terminando la dichiarazione del valore di attributo.
Aaron,

22
esempio di codice sostitutivo:'mystring'.replace(/"/g, '&quot;');
Joshua Burns

3
nel commento precedente c'è un preventivo extra. Il codice che funziona è 'mystring'.replace (/' / g, '& quot;');
Agustin Lopez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.