URL片段(#)允许使用字符

Qli*_*256 6 url fragment-identifier

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

我希望通过不让它看起来太复杂来使URL对眼睛友好.所以我想知道我是否可以使用像':,?,&或'这样的字符.在URL片段中仍然有效.

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

  • 订单通过
    • ID
    • descasc
  • 路径
    • /中/全/逃过/路径/位置/

uno*_*nor 21

TL;博士

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

  • 0 - 9
  • a - z
  • A - Z
  • ? / : @ - . _ ~ ! $ & ' ( ) * + , ; =
  • 百分比编码字符(%后跟两个十六进制数字)

我怎么能找到这个?

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

在本文档中,您将找到您需要知道的所有内容.

片段标识符组件在3.5节中定义:

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

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

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

的定义 pchar

请参阅附录A.以了解如何定义pchar:

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

所以这增加了

  • nonserved中定义的字符
  • pct编码定义的字符
  • 子delims中定义的字符
  • :
  • @

的定义 unreserved

现在检查未保留的定义方式:

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

这增加了

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

ALPHA和的定义DIGIT

检查ALPHA和DIGIT的定义方式.它们未列在附录中,因为它们来自核心ABNF规则,如1.3节所述:

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

所以这增加了

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

的定义 pct-encoded

检查如何定义pct-encoded:

pct-encoded = "%" HEXDIG HEXDIG

这允许任何百分比编码的字符.

的定义 sub-delims

检查子delims的定义方式:

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

这增加了

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

  • 我注意到“#”在片段中没有被列为有效,尽管浏览器似乎很宽松地允许其中多个...... (4认同)
  • `^([-?/:@._~!$&'()*+,;=a-zA-Z0-9]|%[0-9a-fA-F]{2})*$` (根据您的正则表达式方言,可能需要进行一些转义。) (2认同)