【发布时间】:2010-02-04 07:21:48
【问题描述】:
我正在使用 jsps,在我的 url 中我有一个变量的值,比如“L & T”。现在,当我尝试使用request.getParameter 检索它的值时,我只得到“L”。它将“&”识别为分隔符,因此它不会被视为一个完整的字符串。
我该如何解决这个问题?
【问题讨论】:
-
给出一些代码 - 你是如何将“L&T”放在地址栏中的?
我正在使用 jsps,在我的 url 中我有一个变量的值,比如“L & T”。现在,当我尝试使用request.getParameter 检索它的值时,我只得到“L”。它将“&”识别为分隔符,因此它不会被视为一个完整的字符串。
我该如何解决这个问题?
【问题讨论】:
java.net.URLEncoder.encode("L & T", "utf8")
这会输出 URL 编码的,可以作为 GET 参数:
L+%26+T
【讨论】:
URL 中的文字 & 符号应编码为:%26
// Your URL
http://www.example.com?a=l&t
// Encoded
http://www.example.com?a=l%26t
【讨论】:
您需要对参数进行“URL 编码”以避免此问题。 URL 查询字符串的格式为:
...?<name>=<value>&<name>=<value>&<etc>
所有<name>s 和<value>s 都需要进行URL 编码,这基本上意味着将所有可能被错误解释的字符(如&)转换为% 转义值。有关更多信息,请参阅此页面:
http://www.w3schools.com/TAGS/ref_urlencode.asp
如果您使用 Java生成问题 URL,则使用以下方法:
String str = URLEncoder.encode(input, "UTF-8");
在其他地方生成 URL(一些模板或 JS 或原始标记),您需要从源头解决问题。
【讨论】:
您可以使用 Spring Web 中的UriUtils#encode(String source, String encoding)。该实用程序类还提供了仅对 URL 的某些部分进行编码的方法,例如 UriUtils#encodePath。
【讨论】: