【问题标题】:How do we put "plus" sign in html form?我们如何在 html 表单中添加“加号”?
【发布时间】:2012-11-12 05:50:49
【问题描述】:

根据When to encode space to plus (+) or %20?,当我们在html表单名称或值中有任何空格时,我们的浏览器会将空格编码为“+”,但如果我们有“加号”值(例如文本字段)怎么办?用户故意输入的?我们的网络服务器会误解该符号并将其改回空格吗?我们将如何避免这种情况?

【问题讨论】:

  • 抱歉,谁能告诉我谁负责将“+”号改回空格?是由我们(我们的意思是我们应该在 servlet 或 jsp 中处理它)还是 Web 服务器?
  • 未编码 参数返回给应用程序/servlet 是 Web 堆栈(例如 servlet 容器)的责任。这种解码发生在相对较高的位置,因为参数被解码为键/值对。意外的 double-unencoding 可能导致%2b -> + -> (space),这就是为什么它必须只执行一次。
  • @pst 比如我用的是servlet和jsp,通过getParameter("name")会收到已经解码的字符串吧?
  • @GMsoF 我不熟悉 Java Web 框架,但是一个好的框架会为您解码参数。所以是的,我几乎可以肯定,当你调用 getParameter("name") 时,你会得到一个解码的字符串。

标签: java html jsp jakarta-ee servlets


【解决方案1】:

我们的网络服务器会误解符号并将其改回空格吗?

不,因为在表单中输入+ 字符时,它会被编码为%2B

这是一个示例 (fiddle):

<form method="POST" action="/">
    <input name="foo" type="text" value="+">
    <input name="bar" type="text" value="bacon sauce">
</form>

<script>
    // This encodes the form, (i.e. that's what your server receives)
    alert( $('form').serialize() );
</script>

警告框将显示:foo=%2B&amp;bar=bacon+sauce

这意味着+ 被编码为%2B。因此,在您的服务器上,只需将所有+ 字符转换为space,并将%2B 转换为+,但您可能应该将解码部分留给您的框架或库。 ​

这是一个你可以用来玩参数编码的小提琴:fiddle

【讨论】:

  • 你在谈论 html/js/jQuery。问题是关于java的。
  • 你好,也就是说我们必须使用Javascript来改变浏览器的默认编码?
  • @rekire 我只是在使用 jQuery 来展示如何对参数进行编码。
【解决方案2】:

加号需要用% 符号转换成urlencoded 形式。在本例中为 %2B。

【讨论】:

  • 当您通过浏览器发布数据时,浏览器将为您正确编码字符串。如果您需要在客户端对字符串进行编码,您还可以使用 js urlencode 函数或其他答案中的 jQuery 函数。
  • 您几乎不需要显式编码您的 url 参数。就像 rekire 说的,浏览器会为你做这件事。
  • @GMsoF 假设您的表单有一个名为“foo”的字段。如果用户在表单中输入+ 并点击提交按钮,浏览器会将+ 转换为%2B。然后,当您的服务器收到您的请求时,它会将%2B 转换回+。所以,当你调用getParameter("foo") 时,你会得到一个+ 字符。
  • @GMsoF 这里有一个小提琴,你可以用它来玩参数编码:jsfiddle.net/3MFX2/4
  • 就是这样。并且每个需要保护的字符都将以 % 的形式及其十六进制值。
猜你喜欢
  • 1970-01-01
  • 2020-03-17
  • 2011-03-16
  • 1970-01-01
  • 2016-06-26
  • 2018-12-23
  • 1970-01-01
  • 2012-11-29
  • 2021-07-27
相关资源
最近更新 更多