Escape-Anführungszeichen in HTML5-Datenattributen mit Javascript
Lesezeit: 6 Minuten
Ryanve
Ich verwende jQuery .data() um mit benutzerdefinierten HTML5-Datenattributen zu arbeiten, bei denen der Wert des Attributs sowohl einfache als auch doppelte Anführungszeichen enthalten muss:
<p class="example" data-example="She said "WTF" on last night's show.">
Ich kenne die Verwendung von Zeichencodes wie " im Datenattributwert könnte das obige funktionieren, aber ich kann nicht immer kontrollieren, wie die Werte eingegeben werden. Außerdem muss ich in der Lage sein, HTML-Tags wie folgt im Markup zu verwenden:
<p class="example" data-example="
She said "<abbr title="What The F***">WTF</abbr>" on last night's show.
">
Wenn irgendeine Form von .replace() ist die Antwort, dann muss es getan werden, bevor der Wert gelesen wird .data()– vielleicht indem man es über die gesamte Fläche anwendet <body>?
Normaler Backslash mit Escapezeichen wie <abbr title="te\'st">WTF</abbr> geht auch nicht.
Idealerweise hätte dies die Flexibilität, mit beiden zu arbeiten:
data-example="..."
und data-example="..."
Aber wenn es nur in eine Richtung geht, dann könnte ich zumindest damit rollen. Ideen?
Aktualisieren – etwas mehr Kontext:
Ich arbeite daran für responsejs.com. Eine tatsächliche Anwendung davon könnte darin bestehen, eine Seitenleiste nur für Browser über einer bestimmten Breite zu laden (und dies im Browser und nicht in PHP handhaben zu lassen). Im Fall von WordPress könnte die Seitenleiste beispielsweise Widgets, Bilder usw. enthalten. Die Anführungszeichen in PHP-Tags sind kein Problem, da sie in HTML geparst werden, bevor sie zum Browser gelangen. Beispiel:
<aside id="primary" class="sidebar"
data-oweb='
<?php dynamic_sidebar( 'primary' ); ?>
'
>
optional default markup for mobile and no-js browsers here
</aside>
JavaScript hilft Ihnen nicht, nachdem die Seite gerendert wurde, um die Anführungszeichen des Tags zu korrigieren. Muss serverseitig gemacht werden.
– escarello
31. August 2011 um 16:52 Uhr
Es führt kein Weg daran vorbei, Sie müssen die Werte richtig maskieren, oder das HTML kann nicht richtig geparst werden. Sie können Javascript nicht verwenden, um den Code zu korrigieren, nachdem er geparst wurde, da er dann bereits fehlgeschlagen ist.
Ihr Beispiel mit richtiger HTML-Codierung wäre:
<p class="example" data-example="She said "<abbr title="What The F***">WTF</abbr>" on last night's show.">
Sie können Backslash nicht verwenden, um Zeichen zu maskieren, da es sich nicht um Javascript-Code handelt. Sie verwenden HTML-Entitäten, um Zeichen in HTML-Code mit Escapezeichen zu versehen.
Wenn Sie nicht kontrollieren können, wie die Daten eingegeben werden, sind Sie aufgeschmissen. Man muss einfach einen Weg finden, die Kontrolle darüber zu übernehmen.
unterschätzte Lösung – das funktioniert ordentlich
– daggett
5. April um 2:44
Wenn es HTML-Strings mit sein müssen " und ' und so weiter, warum nicht einfach separate HTML-Elemente für sie erstellen: http://jsfiddle.net/N7XXu/.
ZB der HTML-Code:
<p class="example" data-which="1">a</p>
<p class="example-data" data-which="1">She said "<abbr title="What The F***">WTF</abbr>" on last night's show.</p>
Danke – das ist cool, aber für das, wofür ich das brauche, wird es nicht fliegen. Ich habe die Frage gerade mit etwas mehr Kontext aktualisiert.
– ryanve
31. August 2011 um 17:22 Uhr
Da ich das data-Attribut verwende, um einige Daten zusammen mit dem html-Element von PHP zum JavaScript zu transportieren, verwende ich einfach base64_encode auf dem Backend, dann auf der Client-Seite verwenden base64Decode(input) um die Daten zurückzubekommen. So vermeide ich jede Fluchtorgie. Der von mir verwendete JavaScript-Code befindet sich hier http://www.webtoolkit.info/
Damit es sich um richtiges HTML handelt, müssen Sie die lästigen Zeichen maskieren. Ich würde ihnen mit HTML-Entities entkommen. Dies bedeutet, dass das Tool, das zum Eingeben dieser Informationen verwendet wird, diese ordnungsgemäß speichern muss und / oder das Tool, das sie am Backend abruft, sie maskieren muss.
Wenn Sie sie dann in Ihrem JS verwenden möchten, müssen Sie einige Suchen-und-Ersetzen-Funktionen ausführen, um die Zeichen wieder in HTML und Anführungszeichen umzuwandeln.
Die meisten Back-End-Entwicklungssprachen haben eine Art ‘htmlescape/unescape’-Funktionalität, das sollte also nicht allzu schwer sein.
JavaScript hilft Ihnen nicht, nachdem die Seite gerendert wurde, um die Anführungszeichen des Tags zu korrigieren. Muss serverseitig gemacht werden.
– escarello
31. August 2011 um 16:52 Uhr