2

我有一个在 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"。我尝试将 URL 中的 '&' 替换为,&amp;但这不起作用(可能是因为在解析出参数之前它已被解码回直接的 '&')。

谢谢。

4

3 回答 3

1

您是否使用 URLEncode 对 URL 进行编码和解码?如果是这样,你能检查一下它们的输入和输出是什么吗?似乎其中一个特殊字符没有被正确编码/解码

试试看%26_&

于 2013-09-27T17:02:59.857 回答
1

使用http://<server>/Address/Details?summary="Acme %26 co". 因为在 URL 中,特殊的 http 符号(例如 &、/、//)不能用作参数。

于 2013-09-27T17:15:28.280 回答
1

试试你的参数

summary="Acme &amp; co"

&是部分保留字符。请参阅RFC2396 第 2.2 节。保留字符。

如何对 URL 进行编码以避免 java 中的特殊字符

GET 参数中允许的字符

HTTP URL - 参数名称中允许的字符

http://illegalargumentexception.blogspot.in/2009/12/java-safe-character-handling-and-url.html

于 2013-09-27T17:25:56.523 回答