如何处理查询字符串中的特殊字符?
问题描述:
我想处理在Java和JSP查询字符串的特殊字符(&“,”$,#,<,>)如何处理查询字符串中的特殊字符?
的Java:
String userName="abc&def>ghi<j#kl";
String url = "/app/ProductAction.do?userName="+userName+"&pwd=test123";
response.sendRedirect(url);
JSP:
<%
String userName="abc&def>ghi<j#kl";
String url = "/app/ProductAction.do?userName="+userName+"&pwd=test123";
%>
<a href="<%= url %>"> click here </a>
<a href="javscript:callUrl('<%= url %>')"> forward </a>
如何处理需要通过的所有这些特殊字符?
答
见Apache的StringEscapeUtils ApiDoc。
使用此类,您可以使用CSV,HTML,SQL,XML实体或遵循JAVA,JavaScript规则来转义字符串。
例如,以下Java规则,你可以使用此行:
String escapedString = StringEscapeUtils.escapeJava(stringToEscape);
而且,在Java中,你可以使用java.net.URL
类编码适当的URL字符串。一个例子,URL myUrl = new URL(stringWithURL);
答
在JSTL core taglib看看:
<c:url value="expression" context="expression"
var="name" scope="scope">
<c:param name="expression" value="expression"/>
...
</c:url>
答
在Java中,你应该每个URL参数编码与java.net.URLEncoder
。
在JSP中,你不应该使用scriptlets。使用JSP EL,JSTL和其他自定义标签。生成URL的JSTL标签是<c:url>
。它需要处理所有这些:
<c:url value="/app/ProductAction.do" var="theProperlyEncodedUrl">
<c:param name="userName" value="${someBean.userName}"/>
<c:param name="pwd" value="${someBean.pwd}"/>
</c:url>
<a href="<c:out value="${theProperlyEncodedUrl}"/>">click here</a>
答
String userName="abc&def>ghi<j#kl";
String[] strArr = userName.split("[&$#<>]+");
userName = "";
for (String str : strArr){
userName += str;
}
System.out.println(userName);