【问题标题】:# character seems to cause problems with a get Request# 字符似乎会导致获取请求出现问题
【发布时间】:2010-06-02 03:49:10
【问题描述】:

我有一个 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&objId7=-99&preId8=-99&objId8=-99

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

【问题讨论】:

    标签: get httprequest httpresponse


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多