2012-03-15 10 views
1

は、私はいくつかのJSPのvar fooのエスケープ文字jsの関数に、JSPのVARを渡すとき

<c:set var="foo" value="foo's bar"/> 

を持っていると私は、これは明らかにエラーに

missing) after argument list 
が生成されます、次のjsに

<script> 
new SomeFunction('${foo}'); 
</script> 

を持っていると言います

ステートメントは

new SomeFunction('foo's bar'); 

しかし、fooの値にも同じ問題が発生する文字列に二重引用符が含まれる可能性があるので、引数$ {foo}を二重引用符で囲む必要はありません。 fooはどんな文字列でもかまいません。私はそれをfooのバーに設定するだけなので、例は明らかです。現在、私はそうのような問題を解決しています:

<script> 
new SomeFunction('<c:out value="${foo}"/>'); 
</script> 

とSomeFunction内:

SomeFunction = new function(foo) { 
    $(someSelector).text($("<div/>").html(foo).text()); 
} 

このソリューションは、動作しているようです - 私はいくつかのコーナーケースが欠落していないよと仮定します。しかし、私はこれが最善の解決策であるとは確信していません。改善のための代替案や提案はありますか?その一時的なdivを使用することは、私にはハックのようなもので、必要のない解決策が好まれます。

+0

はない[エスケープ()](https://developer.mozilla.org/en/DOM/window.escape)動作しますか?そして、 'unescape()'を使って逆変換してください。 – sinemetu1

+0

可能なdupe:[JSPでアポストロフィや引用符をエスケープする方法(Javascriptで使用)](http://stackoverflow.com/questions/1470768/how-to-escape-apostrophe-or-quotes-on-a-jsp) -used-by-javascript) – tkone

+0

[JSP内から一重引用符をエスケープする方法は?](http://stackoverflow.com/questions/9708242/how-to-escape-a-single-quote-from -within-a-jsp) – BalusC

答えて

0

Apacheのcommons-lang StringEscapeUtils.escapeEcmaScript()を使用して静的メソッドを実装するか、独自に再実装して、特殊文字(一重引用符、二重引用符、改行、タブ)をエスケープし、この関数をEL関数にし、 JSP内:

new SomeFunction('${myFn:escapeJs(foo)}'); 

はEL関数を作成する方法についてend of this pageを参照してください。

-1

あなたがCでescapeXmlを使用することができます。

new SomeFunction('<c:out value="${foo}" escapeXml="true"/>'); 
+0

は属性として、 ''はXMLの特殊文字をエスケープします。 JS特殊文字をエスケープしません。 –

3

からあなたが春を使用している場合は、これを行うことができます。

new SomeFunction('<spring:escapeBody javaScriptEscape="true">${foo}</spring:escapeBody>'); 
関連する問題