Utilizzo di JavaScript virgolette singole e doppie per href's
-
03-07-2019 - |
Domanda
Sto riscontrando problemi con l'escape delle virgolette singole e doppie all'interno della funzione JavaScript di href
.
Ho questo codice JavaScript all'interno di href
. È come -
<a href = "javascript:myFunc("fileDir/fileName.doc", true)"> click this </a>
Ora, poiché le doppie virgolette all'interno delle doppie virgolette non sono valide, ho bisogno di sfuggire alle doppie virgolette interne per essere trattato come parte della stringa quindi, devo farlo -
<a href = "javascript:myFunc(\"fileDir/fileName.doc\" , true)"> click this </a>
Il problema è che anche il codice sopra non funziona. Il codice JavaScript viene troncato in - myFunc(
Ho provato anche con la singola virgoletta - ma anche questo non sembra funzionare (nel senso che se ho una sola virgoletta all'interno della mia stringa letterale, il codice viene troncato).
Questo è quello che ho fatto con una sola citazione:
<a href = 'javascript:myFunc("fileDir/fileName.doc" , true)'> click this </a>
Funziona, ma se ho una virgoletta all'interno della stringa, il codice viene troncato come quello delle virgolette doppie.
Soluzione
L'uso di barre rovesciate per sfuggire alle virgolette è come funziona in JavaScript, ma in realtà non stai scrivendo codice JavaScript lì: stai scrivendo HTML. Puoi farlo utilizzando il metodo di escape HTML: entità carattere.
" // "
' // '
Ad esempio:
<a href="javascript: alert('John O'Brien says "Hi!"');">...</a>
Altri suggerimenti
Come best practice generale, usa virgolette doppie in HTML e virgolette singole in JavaScript. Ciò risolverà la maggior parte dei tuoi problemi. Se hai bisogno di una virgoletta singola in una stringa JavaScript, puoi semplicemente scappare usando \ '- e probabilmente non dovresti annidare stringhe letterali più profonde di così.
Come notato altrove, le entità HTML sono una possibilità se il codice è incorporato in HTML. Ma dovrai comunque gestire le citazioni di escape nelle stringhe nei tuoi file di origine JavaScript, quindi è meglio avere solo una strategia coerente per gestire JavaScript.
Se stai seguendo questa strategia e finisci con una doppia virgoletta incorporata nel tuo JavaScript incorporata nel tuo HTML, usa semplicemente l'entità HTML & amp; quot ;.
Nel caso in cui qualcuno debba sfuggire a qualcosa del genere:
<a href="www.google.com/search?q="how+to+escape+quotes+in+href""</a>
Puoi usare il codice ASCII per le virgolette doppie % 22
:
<a href="www.google.com/search?q=%22how+to+escape+quotes+in+href%22"</a>
È particolarmente utile se passi il link a JavaScript da PHP
Normalmente, questo tipo di codice funziona senza problemi:
<a href="#" onclick="myFunc('...')">Click this</a>
Con questo codice, hai qualche problema?