【问题标题】:URL fragment (#) allowed charactersURL 片段 (#) 允许的字符
【发布时间】:2014-11-23 04:38:58
【问题描述】:

在互联网上进行了一些挖掘之后,我无法找到一个很好的答案来解决我可以将哪些字符用于 URL 片段。我正在编写一个利用 URL 片段的 javascript 脚本。

我想让 URL 看起来不那么复杂,从而使 URL 看起来更美观。所以我想知道我是否可以使用像':,?,&或!'这样的字符在 URL 片段中并且仍然有效。

我的 URL 片段应包含以下值:

  • 按顺序排列
    • id
    • descasc
  • 路径
    • /the/full/escaped/path/here/

【问题讨论】:

  • 谢谢 bmargulies,但我仍然无法在该页面上找到 URL 片段的有效字符。
  • 见 2.5 和 3.5。后者最后说任何事情,甚至 / 和 ?,都可能发生。
  • 对我来说它只说字符 / 和 ?被允许。 (允许使用斜杠(“/”)和问号(“?”)来表示片段标识符内的数据。)

标签: url fragment-identifier


【解决方案1】:

找到有效字符有点棘手,但如果您阅读得足够深入,上面注释的文件确实包含信息。

可用字符如下:

  • “!”
  • “$”
  • “&”
  • "'"
  • "("
  • ")"
  • “*”
  • “+”
  • ","
  • ";"
  • "="
  • “?”
  • “@”
  • 阿尔法
  • 数字
  • “-”
  • “。”
  • “_”
  • “~”
  • "%" HEXDIG HEXDIG
  • ":"
  • "/"

【讨论】:

    【解决方案2】:

    tl;博士

    片段标识符组件可以包含:

    • 0 - 9
    • a - z
    • A - Z
    • ? 987654337 : 987654339 - 987654341 _ 987654343 ! 987654345 & 987654347 ( 987654349 * 987654351 ,;=
    • 百分比编码字符(% 后跟两个十六进制数字)

    我怎样才能找到这个?

    URI 标准是STD 66,目前映射到RFC 3986

    在本文档中,您将找到您需要了解的所有内容。

    fragment identifier component is defined in section 3.5:

    fragment = *( pchar / "/" / "?" )

    这意味着片段可以不包含任何内容或(任何组合)

    • pchar 中定义的字符
    • the /
    • ?

    pchar的定义

    请参阅appendix A. 以了解 pchar 是如何定义的:

    pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

    所以这增加了

    • 未保留中定义的字符
    • pct-encoded 中定义的字符
    • 子分隔符中定义的字符
    • :
    • the @

    unreserved的定义

    现在检查 unreserved 是如何定义的:

    unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"

    这增加了

    • ALPHA 中定义的字符
    • DIGIT 中定义的字符
    • -
    • .
    • _
    • ~

    ALPHADIGIT 的定义

    检查 ALPHA 和 DIGIT 是如何定义的。它们没有在附录中列出,因为它们来自core ABNF rulesexplained in section 1.3也是:

    ALPHA(字母),[…] DIGIT(十进制数字)[…]

    所以这增加了

    • a-z, A-Z
    • 0-9

    pct-encoded的定义

    检查pct-encoded是如何定义的:

    pct-encoded = "%" HEXDIG HEXDIG

    这允许任何percent-encoded character

    sub-delims的定义

    检查 sub-delims 是如何定义的:

    sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

    这增加了

    • !
    • $
    • &
    • '
    • (
    • )
    • *
    • +
    • ,
    • ;
    • =

    【讨论】:

    • 片段标识符组件中有效字符的正则表达式在这里非常有用:-) 任何人都可以提供这个吗?
    • ^([-?/:@._~!$&'()*+,;=a-zA-Z0-9]|%[0-9a-fA-F]{2})*$(根据您的正则表达式方言,可能需要进行一些转义。)
    • 我注意到“#”在片段中没有被列为有效,尽管浏览器似乎在允许其中多个...
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2021-01-23
    • 1970-01-01
    • 2021-11-01
    • 2021-08-03
    • 1970-01-01
    • 2011-05-09
    • 2010-10-23
    相关资源
    最近更新 更多