Wie entkomme ich einem einfachen Zitat?

188

Wie kann ich einem '(einfachen Anführungszeichen) in JavaScript entkommen ?

Hier versuche ich es zu benutzen:

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

Das Ergebnis für den obigen Code ist "hel" im Textfeld. Ich habe versucht, 'durch \' zu ersetzen, aber das bekomme ich.

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

Das Ergebnis für den obigen Code ist "hel \" im Textfeld.

Wie kann ich den einfachen Anführungszeichen erfolgreich entkommen?

Ravi
quelle
Hey Ravi, das ist eher eine HTML-Frage. Ich habe die Frage als HTML neu markiert, aber vielleicht möchten Sie das in Ihrer Frage ändern.
Benjamin Manns

Antworten:

357

Sie können HTML-Entitäten verwenden:

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

Weitere Informationen finden Sie unter Verweise auf Zeichenentitäten in HTML .

Pascal MARTIN
quelle
39
Warum sollte man für Attributwerte doppelte Anführungszeichen verwenden?
Gumbo
5
@Pascal MARTIN: XML erlaubt auch einfache Anführungszeichen für Attributwerte. (Siehe w3.org/TR/xml/#NT-AttValue )
Gumbo
4
@ Gumbo: wooo! Ich glaube nicht, dass ich jemals ein XML-Dokument gesehen habe, das einfache Anführungszeichen um Attributwerte verwendet hat. also dachte ich nicht, dass dies tatsächlich gültig ist ;; Ich habe gerade (noch einmal) etwas gelernt, als ich eine Frage beantwortet habe. Also, danke für diese Kommentare!
Pascal MARTIN
5
Ich weiß, dass dies alt ist, aber ich denke, es ist erwähnenswert, dass es eine HTML-Entität gibt für ":&quot;
Daiscog
1
@Pascal, w3c-Validator zeigt an, dass einfache Anführungszeichen für Attribute gültig sind. Und siehe stackoverflow.com/questions/2210430/…
ChrisJJ
62

Sie können verwenden &apos;(was im IE zweifelhaft ist) oder &#39;(was überall funktionieren sollte). Eine umfassende Liste finden Sie in den W3C HTML5-Referenzen für benannte Zeichen oder in der HTML-Entitätstabelle auf WebPlatform.org .

Benjamin Manns
quelle
Wow, es ist schon eine Weile her, seit ich das geschrieben habe. Vielen Dank, dass Sie es verstanden haben. Ich habe die Links zu zwei Tabellen auf W3C und WebPlatform.org aktualisiert.
Benjamin Manns
Diese funktionieren "überall", außer in VXML <var> -Ausdrucksattributen, bei denen ein weiteres Escapezeichen erforderlich ist, da in VXML <var> ein String-Variablenwert als einfache Anführungszeichen in den normalen doppelten Anführungszeichen der Attributdefinitionen angegeben wird: <var name = "myvar" expr = "'hel \ & apos; lo'" />
Steve Cohen
9

Da Sie sich im Kontext von HTML befinden, müssen Sie HTML verwenden, um dieses Zeichen darzustellen. Und für HTML müssen Sie eine numerische Zeichenreferenz &#39; ( &#x27;hexadezimal) verwenden:

<input type='text' id='abc' value='hel&#39;lo'>
Gumbo
quelle
aber ich habe nicht verstanden, was du damit meinst context of html?
Coding_idiot
@coding_idiot Sehen Sie sich die verschiedenen Token an, auf die ein HTML-Parser während des Analyseprozesses stoßen kann . Jeder Status verfügt über unterschiedliche Analyseregeln, die basierend auf der Eingabe ausgelöst werden. Nicht jeder Zustand erlaubt Zeichenreferenzen. Wenn Sie sich nun den Attributwert (in einfachen Anführungszeichen) ansehen, können Sie sehen, dass a &den Beginn einer Zeichenreferenz bezeichnet.
Gumbo
7

Stellen Sie es als Texteinheit dar (ASCII 39):

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

Wahrscheinlich der einfachste Weg:

<input type='text' id='abc' value="hel'lo">
road242
quelle
-1

Sie könnten versuchen, Folgendes zu verwenden: &#145;

der Verlust
quelle
-1

Verwenden Sie Javascript Inbuild-Funktionen Escape und Unescape

beispielsweise

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'"

Dies ist hilfreich, wenn Sie über große JSON-Stringify-Daten verfügen, die im Attribut verwendet werden sollen

Ram Bharlia
quelle
escapeist nicht unicode sicher. Die Spezifikation rät von seiner Verwendung ab.
Quentin