2009-07-04 7 views
54

Der folgende einfache Codeblock kann in einer statischen HTML-Seite angezeigt werden, führt jedoch zu einem JavaScript-Fehler. Wie sollten Sie dem eingebetteten doppelten Anführungszeichen im onClick-Handler entkommen (zB "xyz")? Beachten Sie, dass der HTML-Code dynamisch generiert wird, indem Daten aus einer Datenbank gezogen werden, deren Daten Auszüge aus anderem HTML-Code sind, die entweder einfach oder doppelt sein können Zitate. Es scheint, dass ein einzelnes Backslash vor dem doppelten Anführungszeichen Zugabe nicht den Trick tut.Escaping von doppelten Anführungszeichen in JavaScript onClick-Ereignishandler

<script type="text/javascript"> 
    function parse(a, b, c) { 
     alert(c); 
    } 
</script> 

<a href="#x" onclick="parse('#', false, '<a href=\"xyz'); return false">Test</a> 

Antwort

71

Versuchen Sie

&quot; oder \x22

statt

\" 

?

+6

Getestet habe ich diese nur in FF3.6 und IE8 unter einem ähnlichen Szenario und es hat nicht funktioniert. Aber das Ersetzen der "mit " tat. Ich testete auch den genauen Code oben und es funktionierte in beide Richtungen. Kurz gesagt scheint die \ x22 nicht in allen Szenarien zu funktionieren, und Sie sollten " in diesem Fall versuchen. – SpliFF

+3

Nice. " scheint zu arbeiten in HTML-Tag-Attribute in Webkit und Firefox und Opera. – NoBugs

+0

\ x22 ist der einzige für mich gearbeitete – Ruwantha

0

ich denke, dass der beste Ansatz ist es, den Onclick-Handler unobtrusively zuweisen.

Soetwas :

window.onload = function(){ 
    var myLink = document.getElementsById('myLinkId'); 
    myLink.onclick = function(){ 
     parse('#', false, '<a href="xyz'); 
     return false; 
    } 
} 

//... 


<a href="#" id="myLink">Test</a> 
4

Sie können auch versuchen, zwei Backslashes (\\") das Escape-Zeichen zu entkommen.

+1

Klassisch. Stackoverflow aß einen deiner Backslashes und zeigte nur den anderen. Ich habe es für dich repariert. – Nosredna

+1

Ups, danke. Frage mich, ob das dem OP passiert ist. –

5

Während ich mit CMS über das tun dies auf eine unaufdringliche Art und Weise (über eine lib wie Jquery oder Dojo) zustimmen, dann ist hier, was auch funktionieren:

<script type="text/javascript"> 
function parse(a, b, c) { 
    alert(c); 
    } 

</script> 

<a href="#x" onclick="parse('#', false, 'xyc&quot;foo');return false;">Test</a> 

Der Grund ist es barfs ist nicht wegen JavaScript, es ist, weil des HTML-Parsers. Es hat kein Konzept von entflohenen Anführungszeichen, es trudelt entlang der Suche nach dem Endzitat und findet es und gibt das als Onclick-Funktion zurück. Dies ist jedoch ein ungültiges JavaScript, so dass Sie den Fehler erst finden, wenn JavaScript versucht, die Funktion auszuführen.

+2

Downvote. Sie brauchen kein Framework für so etwas! –

+0

+1 für " ... – Greg

50

Es muss HTML-Escape sein, nicht Javascript-Escape. Ändern \" zu &quot;