2013-01-21 34 views
1

最近我一直在使用Tomcat 7.0服务器创建几个HTTP服务。下面的代码是我用来测试我的服务的html文件。HTTP参数编码

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body>    
       <form id="fm" method="post" action="http://localhost:8080 
/DataService/ProductData?category=Ser + bø&location=Herlev##Vejle"> 
        <input type="submit" value="Submit"> 
       </form> 
</body> 
</html> 

我的问题是关于类别参数“Ser +bø”。在服务器端,它被读为 “Serbø”,带有三个空格而不是空格,“+”空格。据我所知,这个问题可能会对编码有所帮助。我正在使用UTF-8进行请求。我还更改了Tomcat服务器的配置,以便它使用UTF-8。任何关于我在做什么的想法都是错误的?

回答

0

修改表单动作URL以将参数传递到后端不是处理表单的正确方法。为了避免这一切的最好方法就是使用一个单独的表格参数而不是:

<form id="fm" method="post" action="http://localhost:8080 
/DataService/ProductData?category=Ser %2B bø&location=Herlev##Vejle"> 
    <input type="hidden" name="category" value="Ser %2B bø"> 
    <input type="hidden" name="location" value="Herlev##Vejle"> 
    ... 
</form> 

这是因为 URL都有它自己的编码规则,基于RFC 3986.另外stands for space那里。因此,在将URL传递到服务器之前,应使用JSP或JavaScript对URL进行编码。编码+%2B

<form id="fm" method="post" action="http://localhost:8080 
/DataService/ProductData?category=Ser %2B bø&location=Herlev##Vejle"> 

在它是一个用户输入,你将不得不使用JavaScript对它进行编码,描述here情况。

+0

OK thaks会尝试一下。 – user1593655

+0

再次感谢我设法解决我的问题。 – user1593655

0

+是空格的URL编码表示形式。这就是为什么你把它作为一个空间回来。您基本上需要对各个参数名称和值进行URL编码。

鉴于您正在运行Tomcat,您很可能也在运行JSP。在JSP中,你可以创建正确编码与JSTL<c:url><c:param>网址如下:

<c:url var="formActionURL" value="http://localhost:8080/DataService/ProductData"> 
    <c:param name="category" value="Ser + bø" /> 
    <c:param name="location" value="Herlev##Vejle" /> 
</c:url> 
<form action="#{formActionURL}"> 
    ... 
</form> 
+0

他正在做POST - 那么为什么首先在URL中发送参数呢? –