2012-11-01 49 views
0

我有一些像Java中逃生雙引號和其他特殊字符JS

stringBuffer.append("<a onclick=\"javascript:setPName('"+StringEscapeUtils.escapeJavaScript(tmpResult)+"');\"><small> "+StringEscapeUtils.escapeJavaScript(tmpResult)+"</small></a>"); 

在檢查上的Firebug的控制檯同樣談到正確。但我得到以下,當我從IE瀏覽器開發者工具檢查:

<A onclick="javascript:setPName('TEST\" AKHIL?);?><SMALL>TEST\"AKHIL</SMALL></A>

問題是,瀏覽器是不是還認識它。 我曾使用StringEscapeUtils.escapeJavaScript來轉義單引號,但它不適用於雙引號。

+0

什麼是'javascript:'在做什麼?這是一個毫無意義的[標籤](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/label),因爲沒有循環可以打破或繼續。 – Quentin

+0

結賬[this] [1] post。 [1]:http://stackoverflow.com/questions/ 2004168/javascript-escape-quotes – Andries

回答

2

問題是您在中使用"個字符的HTML屬性值使用相同的字符分隔。

onclick="javascript:setPName('TEST\" <!-- attribute value ends here --> 

JavaScript是無關緊要的。

您需要轉義HTML(&quot;)而不是JS。

您可以通過編寫unobtrusive JavaScript完全避免此問題。

+0

+1不顯眼的JavaScript。 – nikhil

0

變化[']到[「],試試看(請刪除 」的javascript:「)。

stringBuffer.append("<a onclick=\"setPName(\""+StringEscapeUtils.escapeJavaScript(tmpResult)+"\");\"><small> "+StringEscapeUtils.escapeHtml(tmpResult)+"</small></a>"); 

或者將該值設置爲屬性(PARAM)

stringBuffer.append("<a param=\""+StringEscapeUtils.escapeHtml(tmpResult)+"\" onclick=\"setPName(this.getAttribute('param'))\"><small> "+StringEscapeUtils.escapeHtml(tmpResult)+"</small></a>"); 
+0

然後onclick屬性將具有值'javascript:setPName('這會使問題變得更糟! – Quentin