Come posso evitare una sola citazione?


188

Come posso evitare una '(virgoletta singola) in JavaScript?

Questo è dove sto cercando di usarlo:

<input type='text' id='abc' value='hel'lo'>

Il risultato per il codice sopra è "hel" popolato nella casella di testo. Ho provato a sostituire "con \", ma questo è quello che sto ottenendo.

<input type='text' id='abc' value='hel\'lo'>

Il risultato per il codice sopra è "hel \" popolato nella casella di testo.

Come posso evitare con successo le virgolette singole?


Ehi Ravi, questa è più una domanda html. Ho ricodificato la domanda come HTML, ma potresti voler cambiarla nella tua domanda.
Benjamin Manns, l'

Risposte:


358

È possibile utilizzare entità HTML:

  • &#39; per '
  • &#34; per "
  • ...

Per di più, puoi dare un'occhiata ai riferimenti alle entità carattere in HTML .


39
Perché si dovrebbero usare le virgolette doppie per i valori degli attributi?
Gumbo,

5
@Pascal MARTIN: XML consente anche virgolette singole per i valori degli attributi. (Vedi w3.org/TR/xml/#NT-AttValue )
Gumbo

4
@Gumbo: wooo! Non credo di aver mai visto alcun documento XML che utilizzava valori di attributi intorno alle virgolette singole; quindi non pensavo che questo fosse effettivamente valido ;; Ho (ancora una volta) imparato qualcosa mentre rispondevo a una domanda; quindi, grazie per quei commenti!
Pascal MARTIN,

5
So che questo è vecchio, ma penso che valga la pena notare che esiste un'entità HTML per ":&quot;
daiscog

1
@Pascal, validatore w3c mostra che le virgolette singole sono valide per gli attributi. E vedere stackoverflow.com/questions/2210430/...
ChrisJJ

62

Puoi usare &apos;(che è iffy in IE) o &#39;(che dovrebbe funzionare ovunque). Per un elenco completo, consultare i riferimenti ai caratteri denominati HTML5 del W3C o la tabella delle entità HTML su WebPlatform.org .


Wow, è da un po 'che non scrivo questo. Grazie per averlo scoperto: ho aggiornato i collegamenti a due tabelle su W3C e WebPlatform.org.
Benjamin Manns,

Funzionano "ovunque" tranne che negli attributi VXML <var> espressione dove è necessario un ulteriore escape poiché in VXML <var> un valore variabile String è indicato come virgolette singole tra le normali virgolette doppie delle definizioni degli attributi: <var name = "myvar" expr = "'hel \ & apos; lo'" />
Steve Cohen,

9

Dato che sei nel contesto di HTML, devi usare HTML per rappresentare quel personaggio. E per HTML è necessario utilizzare un riferimento di carattere numerico &#39; ( &#x27;esadecimale):

<input type='text' id='abc' value='hel&#39;lo'>

ma non ho capito cosa intendi context of html?
coding_idiot,

@coding_idiot Dai un'occhiata ai diversi token che un parser HTML può incontrare durante il processo di analisi . Ogni stato ha un diverso set di regole di analisi che vengono attivate in base all'input. Non tutti gli stati consentono riferimenti a caratteri. Ora se guardi il valore dell'attributo (virgolette singole) , puoi vedere che a &indica l'inizio di un riferimento al carattere.
Gumbo,

7

Rappresentalo come entità di testo (ASCII 39):

<input type='text' id='abc' value='hel&#39;lo'>

6

Probabilmente il modo più semplice:

<input type='text' id='abc' value="hel'lo">


-1

utilizzare le funzioni javascript inbuild escape e unescape

per esempio

var escapedData = escape("hel'lo");   
output = "%27hel%27lo%27" which can be used in the attribute.

again to read the value from the attr

var unescapedData = unescape("%27hel%27lo%27")
output = "'hel'lo'"

Ciò sarà utile se si dispone di enormi dati di json stringify da utilizzare nell'attributo


escapenon è unicode sicuro. Le specifiche sconsigliano l'uso.
Quentin,
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.