【问题标题】:Empty URI query string parameters: "a=&b=" versus "a&b"空 URI 查询字符串参数:“a=&b=”与“a&b”
【发布时间】:2012-04-09 12:42:17
【问题描述】:

是否应将以下 URL 视为功能等效?

http://example.com/foo?a=&b=

http://example.com/foo?a&b

当我编写的 Drupal 模块的用户将其解析然后重写 URI noticed 时出现这种情况,由于某些底层 PHP 函数的行为方式,该代码有时会导致查询字符串部分以意想不到的方式发生变化。例如:

parse_str("a&b", $values); print http_build_query($values);

a=&b=

这是我应该担心的事情吗?

编辑所以停止抱怨这个问题与另一个问题相似:问题是假设“X 没有值”和“X 的空值”是否等价,而不是“无价值”风格是否安全在语法上是正确的(确实如此)。

【问题讨论】:

  • 作为一种意见,是的,这是您应该担心的事情,因为这迟早会以难以调试的神秘方式中断,具体取决于您计划如何使用 a 和 b 查询参数.如果它们将是空的/null,为什么首先要生成它们?更好的方法可能是让服务器脚本检查这些参数是否存在
  • 我真的无法控制链接到的任何服务器将要做什么。我基本上只是希望那里有一个编纂的标准,我找不到有人可以指出我,或者,如果失败了,只是一种广泛一致的实施方法。如果我都找不到,那么我可能不得不开始担心和重新发明轮子。

标签: http url


【解决方案1】:

RFC 3986 Uniform Resource Identifier (URI): Generic Syntax 除了应该如何处理像? 这样的字符之外,对于查询字符串的结构没有什么可说的。所以严格来说,您的两个示例 URL 不同的。当然,接收这些查询字符串的应用程序可能会将它们视为功能等效,但这不是您可以仅从 URL 确定的。

【讨论】:

    【解决方案2】:

    根据RFC6570 允许空查询参数。请参阅第 3.2.9 节

       Example Template     Expansion
    
       {&x,y,empty}       &x=1024&y=768&empty=
    

    【讨论】:

    • 这是 URI 模板的 RFC,而不是 URL 查询参数。它确认了 RFC 的作者期望 a= 是有效的,但没有说明它是否通常等同于 a
    猜你喜欢
    • 2010-12-21
    • 2021-10-06
    • 1970-01-01
    • 2011-10-20
    • 2021-11-28
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多