【问题标题】:Attempting to send a parameter through GET only sends part尝试通过 GET 发送参数只发送部分
【发布时间】:2016-02-15 05:03:08
【问题描述】:

我正在尝试通过 GET 发送参数。

这是我的网址:

http://localhost/app_yy/public/hotel/cancel?AvailSply=ID_B2B_20#RA1B2BHB

这是print_r 函数的结果:

Array
(
    [AvailSply] => ID_B2B_20
)

但是,我预计 AvailSplyID_B2B_20#RA1B2BHB -- 为什么它的一部分被切断了?

【问题讨论】:

  • @AmitRajput 虽然这与问题无关,但它甚至没有提供讽刺的答案,因为它需要知道解决方案才能看到它的相关性。

标签: php url get


【解决方案1】:

问题

为什么会截掉一部分?

因为参数包含#。如果您的 URL 中有一个井号,则它不会被视为 GET 参数的一部分,而是 fragment identifier。看看那里的部分与# 前面的部分有何相同?那是因为浏览器在它之后假设任何东西

该语法——“# 之后的任何内容标识一个片段”——意味着您不能在 GET 参数中包含该字符。

解决办法

不过,您可以percent-encode 它,这意味着您的网址看起来像

http://localhost/app_yy/public/hotel/cancel?AvailSply=ID_B2B_20%23RA1B2BHB

而不是你所拥有的。注意%23 而不是#——解码后会变成#,但不会触发片段标识符解析。

有很多库可以对内容进行 URL 编码——例如,在 PHP 中,您可以使用 urlencodeurldecode


维基百科的文章很好地描述了片段标识符是什么,但用外行的英语来说,片段标识符标记了您想去的页面中的哪个位置。如果您想链接到文档中的子标题或页面中的选项卡,它会很有用。然而,这里不是你想要的。

【讨论】:

    【解决方案2】:

    在带有数字符号 (#) 哈希或指向锚点的链接的 URL 中被标记。
    如果您希望将 # 作为 GET 参数值传输,则必须对其进行转义:

    • 在 Javascript 中:

      转义(值)

    • 手动(%23 代表 #):

      ....?AvailSply=ID_B2B_20%23RA1B2BHB

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2014-12-08
      • 1970-01-01
      • 2021-11-05
      • 2017-06-03
      • 1970-01-01
      • 2023-03-09
      • 2015-05-19
      • 1970-01-01
      相关资源
      最近更新 更多