Java 读取HTTP请求参数时向字符串中添加的垃圾字符

Java 读取HTTP请求参数时向字符串中添加的垃圾字符,java,servlets,httprequest,forms,Java,Servlets,Httprequest,Forms,我有一个html表单: <p> Select beer characteristics </p> <p> Color: <select name="color" size="1"> <option value="light"> light </option> <option value="amber"> amber </option> <option valu

我有一个html表单:

<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">
对于输入参数name=color,有四个选项:浅色、琥珀色、棕色和深色 根据选择的值,将显示结果页面 但是,当我选择一个选项时,会在选项值的字符串前面和末尾添加一些垃圾字符 调试时,这是在使用request.getParametercolor读取时选择琥珀色时读取的值,如下所示: 琥珀色 这在后端导致了一个问题,我想对输入参数进行字符串匹配
有什么建议吗?

您在HTML代码中使用了错误类型的引号字符

你可能有这样的情况:

<option value=“light“>
除非使用正确的双引号或单引号括起属性,否则浏览器会将该值解释为“light”,而不是light,这就是它发送给服务器的内容

请注意,这在XHTML中是无效的,因为XHTML只允许引用属性,但在普通HTML中以一种格式指定属性是有效的

奇怪的输出可以解释为浏览器和服务器使用不同的编码:一个使用ISO-8859-1,另一个使用UTF-8。左双引号字符的UTF-8序列是0xe2 0x80 0x9c,当使用ISO-8859-1读取时,正好给出您提到的两个字符。第三个字符属于未使用的blo它会悄悄地掉下来


这是一个单独的问题,也需要解决,请参阅其他答案以获取解决方法。

您在HTML代码中使用了错误类型的引号字符

你可能有这样的情况:

<option value=“light“>
除非使用正确的双引号或单引号括起属性,否则浏览器会将该值解释为“light”,而不是light,这就是它发送给服务器的内容

请注意,这在XHTML中是无效的,因为XHTML只允许引用属性,但在普通HTML中以一种格式指定属性是有效的

奇怪的输出可以解释为浏览器和服务器使用不同的编码:一个使用ISO-8859-1,另一个使用UTF-8。左双引号字符的UTF-8序列是0xe2 0x80 0x9c,当使用ISO-8859-1读取时,正好给出您提到的两个字符。第三个字符属于未使用的blo它会悄悄地掉下来


这是一个单独的问题,也需要解决,请参阅其他答案,以获取解决此问题的提示。

这是由于浏览器中的编码错误造成的,这很可能不是在响应时设置的。您可以尝试使用:

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

这是由于浏览器中的编码错误造成的,这很可能不是在响应时设置的。您可以尝试使用:

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

我很确定这与字符编码或URL编码不匹配有关

首先,确保指定一个字符集

当然,您也可以向HTML文件添加编码:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ...
</head>
以US-ASCII编码接收来自请求的URL:

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

我很确定这与字符编码或URL编码不匹配有关

首先,确保指定一个字符集

当然,您也可以向HTML文件添加编码:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ...
</head>
以US-ASCII编码接收来自请求的URL:

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

在使用wkhtmltopdf将xhtml转换为PDF时,我遇到了同样的问题 工具


添加HTML模板解决了这个问题。

在使用wkhtmltopdf将xhtml转换为PDF时,我遇到了同样的问题 工具


添加我的HTML模板解决了这个问题。

什么?错误的引号在哪里?哦,你的意思是在HTML源代码中吗?它们显示为我的正常引号。@DaveNewton是的,虽然问题中的HTML包含正确的字符,但我将输出识别为错误编码的左引号或右引号,我忘记了这是什么解释而不是伪造的编码。@DaveNewton我很有信心是这样的,特别是在发现如果另一种编码不是Windows-1250而是ISO-8859-1,那么输出中的所有字符都匹配。什么?错误的引号在哪里?哦,你的意思是在HTML源代码中吗?它们在我看来是正常的引号。@DaveNewton是的,al尽管问题中的HTML包含正确的字符,但我将输出识别为错误编码的左引号或右双引号,我忘记了这一解释倾向于哪一种,而不是伪造的编码。@DaveNewton我很有信心是这样的,特别是在弄清楚另一种编码是否不是Windows-1250而是ISO-8之后859-1,输出中的所有字符都匹配。