如何从JSP中的查询字符串URL中删除%20

时间:2013-07-16 10:28:37

标签: java jsp

     <a href=" 
    javascript:openWin
                            ('printlist.jsp?CTextSearch=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtSearch"),"UTF-8")%> & CTextNumbr=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtNum"),"UTF-8") %> & CYear=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$cmbYear"),"UTF-8") %> & CSectionNo=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$cmbSection"),"UTF-8") %>&CDatefrom=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtDateFrom"),"UTF-8") %>&CDateto=<%=  URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtDateTo"),"UTF-8")  %>'


                            )" id="ctl00_PagingHolder_btnPrint" class="gena" onclick="">




                            Print List</a>

这是我的查询字符串,我将值发送到print list.jsp 但是在每个值中获取

localhost:8080/Cbdt-cir-not/printlist.jsp?CTextSearch=%20&%20CTextNumbr=14%20&%20CYear=%20&%20CSectionNo=&CDatefrom=&CDateto=    %20

所以我没有得到它的价值     来自request.get parmeter请告诉我在哪里 做错了我已经尝试了很多但无法做到。

4 个答案:

答案 0 :(得分:2)

使用此:

('printlist.jsp?CTextSearch=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtSearch"),"UTF-8")%>&CTextNumbr=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtNum"),"UTF-8") %>&CYear=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$cmbYear"),"UTF-8") %>&CSectionNo=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$cmbSection"),"UTF-8") %>&CDatefrom=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtDateFrom"),"UTF-8") %>&CDateto=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtDateTo"),"UTF-8")  %>'

而不是

('printlist.jsp?CTextSearch=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtSearch"),"UTF-8")%> & CTextNumbr=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtNum"),"UTF-8") %> & CYear=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$cmbYear"),"UTF-8") %> & CSectionNo=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$cmbSection"),"UTF-8") %>&CDatefrom=<%=URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtDateFrom"),"UTF-8") %>&CDateto=<%=  URLEncoder.encode(request.getParameter("ctl00$SearchCriteriaHolder$txtDateTo"),"UTF-8")  %>'

键值对之间有一些空格,被解释为congrete键/值的一部分。所以你的密钥不是“CYear”,你的密钥是“CYear”,通过删除那些属于密钥或值的空格来解决问题。

答案 1 :(得分:1)

您可以尝试使用URLDecoder

    String test = "ocalhost:8080/Cbdt-cir-not/printlist.jsp?
                   CTextSearch=%20&%20CTextNumbr=
                   14%20&%20CYear=%20&%20CSectionNo=&
                   CDatefrom=&CDateto= %20";


System.out.println(URLDecoder.decode(test, "utf-8"));

答案 2 :(得分:1)

使用带有UTF-8字符集的URLEncoder来编码和解码URL, 在Java Script中构造URL时,请在JavaScript中使用encodeURI和decodeURI。

答案 3 :(得分:1)

我只想添加@Peter Rader回答说你拥有所有那些%20的原因是因为URL规范(RFC 1738,Dec。'94)存在问题,因为它限制了允许字符的使用在URL中只有US-ASCII字符集的有限子集:

“...只有字母数字[0-9a-zA-Z],特殊字符”$ -_。+!*'(),“

[不包括引号 - ed],用于保留目的的保留字符可以在URL中以未编码的形式使用。“

另一方面,HTML允许在文档中使用整个范围的ISO-8859-1(ISO-Latin)字符集 - 而HTML4扩展了允许的范围以包括所有Unicode字符集。对于非ISO-8859-1字符(Unicode集中的字符大于FF十六进制/ 255十进制),它们只能在URL中使用,因为没有安全的方法来指定URL内容中的字符集信息然而[RFC2396。]

这就是为什么当你试图把空白空间转换为“%20”时,它只是一个字符的表示