2013-01-21 60 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中發送參數呢? –