我自己写的String类对象的过滤器Fiter不起作用,求大神指点
string 过滤器 --------------------编程问答-------------------- 上代码如下:
package com.minshu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SurveyServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -906581454692189344L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
request.setCharacterEncoding("utf-8");
out.println("姓名:"+ request.getParameter("name")+"<br>");
out.println("EMail:"+ request.getParameter("email")+"<br>");
out.println("age"+ request.getParameter("age")+"<br>");
out.println("编程时间:"+ request.getParameter("code")+"<br>");
out.println("操作系统:");
String os[]= request.getParameterValues("os");
out.println("<ul>");
for(int i=0;i<os.length;i++){
out.println("<li>"+os[i]+"</li>");
}
out.println("</ul><br>");
out.println("编程语言:");
String language[]= request.getParameterValues("language");
out.println("<ul>");
for(int i=0;i<language.length;i++){
out.println("<li>"+language[i]+"</li>");
}
out.println("</ul><br>");
out.println(filterHtml((String)request.getParameter("comment"))+"<br>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public String filterHtml(String value) {
value=value.replaceAll("$", "$amp;");
value=value.replaceAll("<", "$lt;");
value=value.replaceAll(">", "$gt;");
value=value.replaceAll(" ", "$nbsp;");
value=value.replaceAll("'", "$acute");
value=value.replaceAll("\n", "<br>");
value=value.replaceAll("\"", "$quot;");
return value;
}
} --------------------编程问答-------------------- 加入out.println(filterHtml((String)request.getParameter("comment"))+"<br>");后,报错
--------------------编程问答-------------------- 求大神指点,我的 public String filterHtml(String value) {
value=value.replaceAll("$", "$amp;");
value=value.replaceAll("<", "$lt;");
value=value.replaceAll(">", "$gt;");
value=value.replaceAll(" ", "$nbsp;");
value=value.replaceAll("'", "$acute");
value=value.replaceAll("\n", "<br>");
value=value.replaceAll("\"", "$quot;");
return value;
}
到底错在那里了? --------------------编程问答-------------------- value=value.replaceAll("$", "$amp --------------------编程问答-------------------- $括起来试一下 [$] --------------------编程问答-------------------- 改成\\$ --------------------编程问答-------------------- replaceAll的第一个参数,是一个正则表达式,所以,有些字符是需要转义的
而有的,比如,\n,你可以试试用"$"来代替
除了这些之外,<,>等等的替换,你可以搜一下公共的API --------------------编程问答-------------------- 是不是你的文档是编码是iso-8859-1的格式;建议均改成utf-8,另外如果是tomcat的话,也可通过指定编码格式来完成。可参见服务器端获取get请求数据乱码通过设置Tomcat的server.xml文件中Connector元素的URIEncoding属性为一个支持中文的编码即可解决。 --------------------编程问答-------------------- value=value.replaceAll("$", "$amp;");
value=value.replaceAll("<", "$lt;");
value=value.replaceAll(">", "$gt;");
value=value.replaceAll(" ", "$nbsp;");
value=value.replaceAll("'", "$acute");
value=value.replaceAll("\n", "<br>");
这些都不能这么写,看replaceAll中的方法:
public Matcher appendReplacement(StringBuffer sb, String replacement) {
// If no match, return error
if (first < 0)
throw new IllegalStateException("No match available");
// Process substitution string to replace group references with groups
int cursor = 0;
String s = replacement;
StringBuffer result = new StringBuffer();
while (cursor < replacement.length()) {
char nextChar = replacement.charAt(cursor);
if (nextChar == '\\') {
cursor++;
nextChar = replacement.charAt(cursor);
result.append(nextChar);
cursor++;
} else if (nextChar == '$') {
// Skip past $
cursor++;
// The first number is always a group
int refNum = (int)replacement.charAt(cursor) - '0';
if ((refNum < 0)||(refNum > 9))
throw new IllegalArgumentException(
"Illegal group reference");这里抛出异常了。replaceAll的第二个参数不能以$开头
cursor++; --------------------编程问答-------------------- replaceAll的第一个参数,是一个正则表达式,所以,有些字符是需要转义的
而有的,比如,\n,你可以试试用"$"来代替
除了这些之外,<,>等等的替换,你可以搜一下公共的API
补充:Java , Eclipse