我正在尝试在jee中获取url参数。 所以我有这样的网址:
http://MySite/MySite.jsp?page=recherche&msg=toto
首先我试过:request.getParameter("msg").toString();
它运行良好,但如果我尝试搜索“c ++”,方法“getParameter()”返回“c”而不是“c ++”,我理解。
所以我尝试了另一件事。我获取当前URL并解析它以获取消息的值:
String msg[]= request.getQueryString().split("msg=");
message=msg[1].toString();
它现在适用于研究“c ++”,但现在我无法搜索重音。我该怎么办?
编辑1
我在网址
中对邮件进行编码 String urlString=Utils.encodeUrl(request.getParameter("msg"));
对于网址:http://MySite/MySite.jsp?page=recherche&msg=c++
我有这个编码的网址:http://MySite/MySite.jsp?page=recherche&msg=c%2B%2B
当我需要它时,我会解码URL的消息
String decodedUrl = URLDecoder.decode(url, "ISO-8859-1");
谢谢大家
答案 0 :(得分:1)
您通过“get”方法发送的任何内容都会作为url的一部分,如果它包含至少一个保留字符,则需要对其进行urlencoded以使其有效。因此,任何字符都需要在发送之前进行编码。
要发送c++
,您必须发送c%2B%2B
。这将在服务器端正确解释。
您可以查看以下参考资料:
http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
现在的问题是,您如何以及在何处生成您的网址?根据语言,您需要使用正确的方法对字符串进行编码。
答案 1 :(得分:1)
如果我尝试搜索“c ++”,方法“getParameter()”返回“c”而不是“c ++”
查询参数被视为application/x-www-form-urlencoded
,因此URL中的+
字符表示参数值中的空格字符。如果您要发送+
字符,则需要在网址中将其编码为%2B
:
http://MySite/MySite.jsp?page=recherche&msg=c%2B%2B
同样适用于重音字符,它们需要作为UTF-8表示的字节进行转义,因此需要été
:
msg=%C3%A9t%C3%A9
(é
是Unicode字符U + 00E9,它是UTF-8中的C3 A9。)
简而言之,这不是这段代码的错,它是负责在客户端构建URL的任何组件的错误。
答案 2 :(得分:0)
使用
调用您的网址msg=c%2B%2B
网址中的 +
表示“空格”。它需要逃脱。
答案 3 :(得分:0)
将URL作为参数传递时,需要转义特殊字符。由于+
表示空格和&
表示和另一个参数,因此不能将它们用作参数值。
查看此其他S.O. question。
您可能希望使用Apache HTTP客户端库来帮助您进行URL编码/解码。 The URIUtil class有你需要的东西。
这样的事情应该有效:
String rawParam = request.getParameter("msg");
String msgParam = URIUtil.decode(rawParam);
您的示例表明数据未在客户端正确编码。请参阅此JavaScript问题。