问题在解码参数在get方法,JSP(Problem in decoding parameters i

2019-10-29 06:40发布

这里怎么jsp页面被调用。

eventMap.jsp?venue=%C4%B0ndigo

这是eventMap.jsp行,我得到的场地参数:

var venue="<%= URLDecoder.decode(request.getParameter("venue"),"UTF-8") %>";

不幸的是,这是导致最终的javascript:

var venue="Ä°ndigo"; 

我怎样才能正确地在jsp页面,以便正确地得到解码值(İngido)使用的编码。

编辑:全eventMap.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLDecoder"%>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Event on Map></title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" charset="UTF-8">
  function initialize() {
    <% request.setCharacterEncoding("UTF-8"); %> 
    var lat=<%= request.getParameter("lat") %>;
    var lng=<%= request.getParameter("lng") %>;
    var venue="<%= URLDecoder.decode(request.getParameter("venue"),"UTF-8") %>";

    var myLatlng = new google.maps.LatLng(lat,lng);
    var myOptions = {
      zoom: 15,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var marker = new google.maps.Marker({
        position: myLatlng, 
        map: map,
        title:"Hello"
    });   

    var infowindow = new google.maps.InfoWindow({ content: venue, size: new google.maps.Size(50,50)});
        google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(map,marker);
    });

  }
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas"></div>
</body>

</html>

Firebug的结果:

<!DOCTYPE html>
2
3
4<html>
5<head>
6<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
7<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
8<title>Event on Map</title>
9<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
10<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
11<script type="text/javascript" charset="UTF-8">
12 function initialize() {
13 var lat=41.062786;
14 var lng=28.981934;
15 var venue="Ä°Tà Kültür Sanat BirliÄi (KSB) Binası Küçük Salon (Maslak)";
16
17 var myLatlng = new google.maps.LatLng(lat,lng);
18 var myOptions = {
19 zoom: 15,
20 center: myLatlng,
21 mapTypeId: google.maps.MapTypeId.ROADMAP
22 }
23 var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
24
25 var marker = new google.maps.Marker({
26 position: myLatlng,
27 map: map,
28 title:"Hello"
29 });
30
31 var infowindow = new google.maps.InfoWindow({ content: venue, size: new google.maps.Size(50,50)});
32 google.maps.event.addListener(marker, 'click', function() {
33 infowindow.open(map,marker);
34 });
35
36 }
37</script>
38</head>
39<body onload="initialize()">
40 <div id="map_canvas"></div>
41</body>
42
43</html> 

Answer 1:

在GET查询字符串的解码是由servletcontainer处理,而不是由Servlet API的。 目前还不清楚这servletcontainer你使用,所以我不能给出一个详细的解答。 在例如Tomcat的,它的configureable通过URIEncoding在属性<Connector>在元件/conf/server.xml

<Connector URIEncoding="UTF-8">

配置是在其他servletcontainers类似。

然后,你可以删除不必要的URLDecoder线。 该getParameter()已经返回解码参数。

也可以看看:

  • Unicode的-如何让人物吧? - JSP / servlet请求

无关的实际问题,我强烈建议由EL取代scriptlet和使用JSTL fn:escapeXml防止XSS攻击。

var lat = ${fn:escapeXml(param.lat)};
var lng = ${fn:escapeXml(param.lng)};
var venue = "${fn:escapeXml(param.venue)}";

也可以看看:

  • 如何避免在JSP文件Java代码?


Answer 2:

什么是你的JSP头是什么样子?

请确保它说是这样的:

<%@ page contentType="text/xhtml;charset=UTF-8"%>

您还可以检查调用你的JSP时,你得到的HTTP标头。 确保你的反应是UTF-8编码。



Answer 3:

也许这种方法覆盖了错误的编码:request.setCharacterEncoding(“UTF-8”)

也许你应该检查编码在JSP头或请求头中使用。

查理



文章来源: Problem in decoding parameters in get method, JSP