web-dev-qa-db-ja.com

特殊文字をエスケープするJSTL

特殊文字にこの奇妙な問題があります。 JSPでは、フィールド名をIDとして使用しており、名前は次のようになります

id="<1 and &>2" (OR)
id="aaa & bbb"

名前以外のIDを使用するオプションはありません。これはバックエンドから取得する唯一のものです。

だから、JSTLを使用してすべての特殊文字を削除するロジックはありますか?現在のシナリオでは、JSでIDを使用していくつかの操作を行います。これは、ブラウザの種類ごとに多くの問題を引き起こしています。

事前に感謝し、提案してください...

27
Max

JSTLは、HTMLの特殊文字をエスケープする2つの手段を提供します。

<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
...
<c:out value="${myName}"/> 

そして

${fn:escapeXml(myName)}

両方とも、特殊文字をそれぞれのHTMLエンティティに変換します(<&lt;になり、&&amp;になります)。

IDはHTMLでエンコードする必要がありますが、JavaScriptではエンコードしないでください。

48
JB Nizet

あなたの質問は誤解されていたと思います。私はあなたと同じ場所に着き、excapeXml = "false"で問題を解決しました。

<c:out value="${id}" escapeXml="false"/> 

データベースに次のようなデータがありました:

lt; Hello Worldgt;

そしてescapeXml = "false"で表示しました

<Hello World>
21
James

これがあなたが探しているものだと思う

Spring HtmlUtils.htmlEscape(String input)を使用します。

2
Ramesh PVK

私は、他の特殊文字とは別に単一引用符をエスケープする必要があるシナリオに直面しました。その場合、fn:escapeXmlは失敗しました。そこで、Spring APIのJavaScriptUtils.javaScriptEscape()を使用し、タグを作成して適用しました。これで問題は解決しました。 URLも参照しました: http://www.coderanch.com/t/528521/JSP/Java/Passing-JSTL-variable-special-characters

1
RKH