2014-08-28 46 views
1

我有一個HTML形式:垃圾字符被添加到字符串時讀取HTTP請求參數

<p> Select beer characteristics </p> 
<p> 
    Color: 
    <select name="color" size="1"> 
    <option value="light"> light </option> 
    <option value="amber"> amber </option> 
    <option value="brown"> brown </option> 
    <option value="dark"> dark </option> 
    </select> 
    <br><br> 
</p> 
<input type = "submit" value="submit"> 
  • 用於將輸入的參數名稱=「彩色」,有四種選擇:光,琥珀色,棕色,暗
  • 基於被選擇其值,結果顯示的網頁
  • 然而,當我選擇一個選項,也有前部和在所述串的選項值
  • 的端部被添加了一些垃圾字符在調試時,t他在閱讀時使用request.getParameter(「color」)時讀取的值(在選擇「琥珀色」時)看起來像: 「琥珀色」
  • 這是在我想要做的後端導致問題字符串匹配輸入參數

有什麼建議嗎?

回答

2

您在HTML代碼中使用了錯誤的引號字符。

什麼,你可能有是這樣的:

<option value=「light「> 

除非你使用了正確的雙引號(「)或單引號(')圍成屬性,瀏覽器會解釋值作爲「light「和不light,而這正是其發送到服務器。

(注意,在XHTML,僅引用屬性允許這不會是有效的,但在純HTML的<foo bar=value>格式作品指定的屬性。)

奇怪的輸出可以解釋爲您的瀏覽器和您的服務器使用不同的編碼:一個使用ISO-8859-1和另一個UTF-8。左側雙引號字符的UTF-8序列爲0xe2 0x80 0x9c,當用ISO-8859-1讀取時,給出了您提到的兩個字符。 (第三個落在一個未使用的塊中,並被無聲地丟棄。)

這是一個單獨的問題,需要修復,請參閱其他解決方法來處理它。

+0

什麼?錯誤的引號在哪裏?哦,你的意思是在HTML源代碼中嗎?他們對我來說是正常的引號。 – 2014-08-28 17:16:47

+0

@DaveNewton是的,雖然問題中的HTML包含正確的字符,但我將輸出識別爲錯誤編碼的左或右雙引號(我忘了它) – biziclop 2014-08-28 17:22:15

+0

我傾向於這種解釋而不是僞編碼。 – 2014-08-28 17:42:22

1

這是瀏覽器中錯誤編碼的結果,很可能沒有設置響應。您可以嘗試使用:

response.setContentType("text/html; charset=UTF-8"); 
2

我確定這與字符編碼或URL編碼不匹配有關。

首先,確保指定字符集

<form action="..." method="..." accept-charset="UTF-8"> 
    <select ...> ... </select> 
</form> 

如果客戶端正確地發送所有的東西具有良好的編碼(UTF-8),您必須配置您的服務器端閱讀數據也是如此。

我不知道你使用的是什麼,但一個方法是:

URLDecoder.decode(formParams, "UTF-8"); 

可以肯定的,你可以添加一個編碼的HTML文件,以及:

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    ... 
</head> 

編輯:確保正確發送和接收所有的東西。

發送HTML文件從服務器:

1)確保設置此:
的Content-Type:text/html的; charset = UTF-8

如果您要發送文件,請務必使用UTF-8編碼保存文件。 如果你的HTML是一個生成的字符串,使用:

PrintWriter writer = new PrintWriter(new OutputStreamWriter(httpOutputStream, "UTF-8")); 
writer.print(string); 
... 

從請求的URL在US-ASCII編碼,接收:

String urlEncodedString = new String(receivedBytes, "UTF-8"); 
String decoded = URLDecoder.decode(urlEncodedString, "UTF-8"); 
0

我面臨同樣的問題,而使用wkhtmltopdf轉換XHTML爲PDF 工具。在我的HTML模板中添加<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">解決了問題。