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

时间:2016-02-15 05:03:09

标签: php url get

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

这是我的网址:

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

这是print_r函数的结果:

Array
(
    [AvailSply] => ID_B2B_20
)

但是,我预计AvailSplyID_B2B_20#RA1B2BHB - 为什么它会被切断?

2 个答案:

答案 0 :(得分:2)

问题

  

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

因为参数包含 f = new File(Main.getInstance().getDataFolder() + File.pathSeparator + "playerdata", uuid.toString() + ".yml"); d = YamlConfiguration.loadConfiguration(f); 。如果您的网址中有一英镑,则不会将其视为GET参数的一部分,而是fragment identifier。看看那里的部分与#前面的部分是一样的?那是因为浏览器在它是

之后会做出任何假设

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

解决方案

但是,您可以percent-encode,这意味着您的网址将如下所示

#

而不是你拥有的。请注意http://localhost/app_yy/public/hotel/cancel?AvailSply=ID_B2B_20%23RA1B2BHB 而不是%23 - 解码后会转换为#,但不会触发片段标识符解析。

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

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

答案 1 :(得分:1)

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

  • 在Javascript中:
      

    逃逸(值)

  • 手动(%23代表#):
      

    ...?AvailSply = ID_B2B_20%23RA1B2BHB