#character似乎导致get请求出现问题

时间:2010-06-02 03:49:10

标签: get httprequest httpresponse

我有一个queryString,我将其传递给servlet的doGet()方法,如下所示:

  

计数= 9&安培; preId0 = -99&安培; objId0 = -99&安培; preId1 = -99&安培; objId1 = -99&安培; preId2 = 69&安培; objId2 = 16#78&安培;!preId3 = -99&安培; objId3 = -99&安培; preId4 = -99&安培; objId4 = -99&安培; preId5 = -99&安培; objId5 = -99&安培; preId6 = -99&安培; objId6 = -99&安培; preId7 = -99&安培; objId7 = -99&安培; preId8 = -99&安培; objId8 = -99

包含#之后的所有内容都为null,所以我假设#有一些特殊含义。这是真的?还有其他这样的角色会这样做吗?

4 个答案:

答案 0 :(得分:4)

是的,#表示哈希值。例如,这用于跳转到页面内的锚标签。无论何时将数据放入URL,都需要对其进行URL编码。在JavaScript中,您可以使用encodeURIComponent()。在其他语言中,您需要查找文档。

答案 1 :(得分:2)

#表示URL的锚点部分,用于标识URL其余部分返回的文档中的特定位置。它在技术上称为Fragment portion of the URI.

#之后的所有内容都是其中的一部分。因为只有在文档被返回和处理时才会相关(再次,它代表该文档中的位置),它只对客户感兴趣。它对服务器没有任何意义或价值,客户端会将整个值视为单个值(除非您提供额外的自定义代码来分解值并从中提取其他含义)。

如果您需要将字符#作为网址中值的一部分传递,请将其替换为%23 - 您可以使用URL Encoding以编程方式执行此操作,这将取代所有“特殊的“具有可通过URI传输的字符。

答案 2 :(得分:2)

作为一般的经验法则,在将查询字符串参数发送到服务器之前,最好对其进行URLENCODE。 url中的#用于表示您当前所处的锚点,并在尝试将其发送到服务器时导致问题。

有关网址编码的更多信息,请访问:http://www.w3schools.com/tags/ref_urlencode.asp

答案 3 :(得分:2)

“#”是一个特殊字符。它引用了页面锚点中通常使用的哈希。您可以在网址中简单地对此字符%23进行编码,这将消除此问题。其他有意义的人物是? [空间]&