在onClick上内联encodeURIComponent

时间:2012-08-31 13:48:11

标签: javascript jsp

我的页面上有一个链接,单击时会调用带有2个参数的方法。其中一个参数可能有特殊字符(即'或é等)。当我尝试传递这些变量时出现页面错误,所以我试图在传递它们之前对它们进行编码。如何调用encodeURIComponent inline?

我正在尝试这样做:

<a  title="${facet.toolTipDisplay}" onclick="submitFacet('Company', '${encodeURIComponent(facet.javaScriptVar)}')">

我似乎得到了错误:

SEVERE: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: /WEB-INF/pages/SearchForm.jsp(831,126) The function encodeURIComponent must be used with a prefix when a default namespace is not specified

免责声明:我不熟悉Web内容,只能访问JSP页面,而不能访问facet.javaScriptVar来自的java类。

2 个答案:

答案 0 :(得分:0)

您是否正在尝试使用Java或JS对UI组件进行编码?我认为最简单的方法是使用JS函数。编码方法将取决于要编码的字符,从不太独占到大多数escape(不适合uris),encodeUriencodeUriComponent

<a  title="${facet.toolTipDisplay}" onclick="submitFacet('Company', 
    'encodeURIComponent(${facet.javaScriptVar})'">

为了更礼貌,您可以在submitFacet函数中应用编码,只需传递Company和您的JSTL var。

阅读你的评论我建议在用JS处理它之前逃避va内容,否则将无法实现。

尝试以下两种方法之一:

onclick="submitFacet('<c:out value="${facet.javaScriptVar}"/>')"  

onclick="submitFacet('${fn:escapeJava(facet.javaScriptVar)}')" 

假设您导入Apache taglib。

答案 1 :(得分:0)

我决定只用“\'”替换撇号(逃脱撇号)。当我的函数被调用时,转义的撇号会像正常一样被撇号替换。

这就是HTML中的样子:

// arguments = Company, L\'Oréal (4)
onclick="submitFacet('Company', '${fn:replace(facet.toolTipDisplay, "'", "\\'")}')"

然后调用submitFacet函数时的样子:

"Company", "L'Oréal (4)"