2

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

count=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& -99&preId8=-99&objId8=-99

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

4

4 回答 4

4

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

于 2010-06-02T03:54:31.577 回答
2

指示 URL的#锚点部分,用于标识由 URL 的其余部分返回的文档中的特定位置。它在技术上称为URI 的片段部分。

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

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

于 2010-06-02T03:53:15.323 回答
2

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

有关 URL 编码的更多信息可以在这里找到: http: //www.w3schools.com/tags/ref_urlencode.asp

于 2010-06-02T03:54:19.237 回答
2

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

于 2010-06-02T03:56:12.723 回答