尝试通过 GET 发送参数只会发送部分


Attempting to send a parameter through GET only sends part

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

这是我的网址:

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

这是print_r函数的结果:

Array
(
    [AvailSply] => ID_B2B_20
)

然而,我被期望AvailSply ID_B2B_20#RA1B2BHB - 为什么它的一部分被切断了?

问题

为什么它的一部分被切断了?

因为该参数包含一个#.如果您的 URL 中有磅,则不会将其视为 GET 参数的一部分,而是片段标识符。看看那里的部分与#前面的部分如何相同?那是因为浏览器在它是

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

解决方案

不过,您可以对其进行百分比编码,这意味着您的 URL 将如下所示

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

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

有很多库可以对东西进行URL编码 - 例如,在PHP中,您可以使用urlencodeurldecode

<小时 />

维基百科的文章很好地描述了片段标识符是什么,但在外行的英语中,片段标识符标记了你想去的页面。例如,如果您想链接到文档中的副标题或页面中的选项卡,这将非常有用。但是,在这里,这不是您想要的。

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

  • 在Javascript中:

    转义(值(

  • 手动(%23 代表 #(:

    ....?AvailSply=ID_B2B_20%23RA1B2BHB