[英]How to escape quotes and special chars from string and pass it to JS onClick method?
[英]escape possible quotes in string passed to a js function in a onclick event
我在jspx中有以下循环:
<c:forEach var="var" items="${dataFile.list.rows}">
<li>
<div>
<a href="#" onClick="myFunct('${var.url}','escape(${var.title}),'escape(${var.descr})');">
<img width="108" height="66" alt="" src="${var.img}" />
</a>
</div>
</li>
</c:forEach>
函数myFunct自己做了一些东西。 当${var.title}
或${var.descr}
包含引号或双引号时,我的问题就出现了。 我事先不知道会不会有一些。
我尝试了上面的内容,在元素之前尝试了一个辅助js部分,但是不知道要使用哪种引号,所以我无法猜测是否需要使用escape("${var.title}");
或escape('${var.title}');
。
关于如何解决这个问题的任何想法? 谢谢。
您应该在服务器端执行此操作,而不是在客户端执行此操作。 无论如何,在客户端进行此操作为时已晚。 根据值的唯一用途,是将其用作HTML的一部分且不包含换行符,还是用作JS代码,您可以使用JSTL提供的EL函数fn:escapeXml()
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<a onclick="myFunct('${var.url}','${fn:escapeXml(var.title)}','${fn:escapeXml(var.descr)}');">
或者创建一个自定义EL函数,它使用Apache Commons Lang StringEscapeUtils#escapeJavaScript()
。
<%@taglib prefix="my" uri="http://example.com/functions" %>
...
<a onclick="myFunct('${var.url}','${my:escapeJs(var.title)}','${my:escapeJs(var.descr)}');">
您可以在此答案的底部找到一个具体的示例如何创建EL函数。
我猜它会被用作HTML的一部分,所以fn:escapeXml()
就足够了。
您不需要创建自己的EL函数,而是直接从自定义.tld使用apache-commons:
<function>
<name>escapeJavaScript</name>
<function-class>org.apache.commons.lang.StringEscapeUtils</function-class>
<function-signature>java.lang.String escapeJavaScript(java.lang.String)</function-signature>
</function>
我建议您在服务器上进行编码http://www.roseindia.net/jsp/jsp-url-encoding.shtml
或将内容存储在隐藏元素中
<span id="url" style="display:none">${var.URL}</span>
<span id="title" style="display:none">${var.title}</span>
<span id="desc" style="display:none">${var.descr}</span>
并执行onClick="return myFunct(['url','title','desc'])">...</a>
function myFunct(parms) {
var url = parms[0]?document.getElementById(parms[0]).innerHTML:"No url";
var title = parms[1]?document.getElementById(parms[1]).innerHTML:"No title";
var descr = parms[2]?document.getElementById(parms[2]).innerHTML:"No description";
return false;
}
您需要将有效的JavaScript字符串文字传递给myFunct
。 escape
是一个JavaScript函数,也需要有效的String。 因此,您需要将Java String转换为有效的JavaScript文本。 使用apache commons-lang StringEscapeUtils.escapeECMAScript
来逃避它。 您可以将其设为EL功能,然后使用类似
onClick="myFunct('${myFn:escapeJs(var.url)}','${myFn:escapeJs(var.title)}, '${myFn:escapeJs(var.descr)}');"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.