我有一个在tomcat 6上运行的servlet,应按如下方式调用:
http://<server>/Address/Details?summary="Acme & co"
但是:当我遍历servlet代码中的参数时:
//...
while (paramNames.hasMoreElements()) {
paramName = (String) paramNames.nextElement();
if (paramName.equals("summary")) {
summary = request.getParameter(paramName).toString();
}
}
//...
summary
的值为"Acme "
。
我假设tomcat忽略了引号 - 所以它将"& co"
视为第二个参数(尽管形成不正确:没有=...
)。
所以:有什么方法可以避免这种情况吗?我希望summary
的值为"Acme & co"
。我试过更换'&amp;'在&
的网址中,但不起作用(可能是因为它在解析参数之前被解码回直接'&amp;'。)
感谢。
答案 0 :(得分:1)
您是否使用URLEncode对URL进行编码和解码?如果是这样,你能检查一下它们的输入和输出是什么吗?似乎其中一个特殊字符未正确编码/解码
对%26
&
答案 1 :(得分:1)
使用http://<server>/Address/Details?summary="Acme %26 co"
。因为在URL中,特殊的http符号(例如,&amp;,/,//)不能用作参数。
答案 2 :(得分:1)
尝试像
这样的参数summary="Acme & co"
&
是部分保留字符。请参阅RFC2396部分
2.2。保留字符。
how to encode URL to avoid special characters in java
Characters allowed in GET parameter
HTTP URL - allowed characters in parameter names
http://illegalargumentexception.blogspot.in/2009/12/java-safe-character-handling-and-url.html