gpt4 book ai didi

java - URL 的 PATH 段中是否允许使用 "&"符号?

转载 作者:行者123 更新时间:2023-12-01 11:09:39 25 4
gpt4 key购买 nike

URL 的 PATH 段中允许使用“&”符号还是应该转义?

根据 nu w3c validator ( https://validator.w3.org/nu/ )我得到:

Error: & did not start a character reference. (& probably should have been escaped as &.)
At line 407, column 52
<a href="/Bags-&-Purses/c/wome

但是,如果我尝试通过 Java URI 类对 URL 进行编码,我会编码所有空格等,但不会编码 & 符号。

URI u = new URI(request.getScheme(), null,
request.getServerName(), request.getServerPort(),
request.getContextPath() + url,
query, null);
u.toURL().toString();

网址字符串所在位置:/Bags-&-Purses/c/womens-accessories-bags

结果是:https://localhost:8112/storefront/Bags-&-Purses/c/womens-accessories-bags - 未编码

问题是为什么 & 没有转义..这有效吗?我想它应该用 %26 进行转义,但看起来它没有被转义。

最佳答案

& 虽然是保留字符,但似乎是 URI 中路径段的有效字符。如果你看看 RFC3986, section 3.3 中为路径段给出的语法, & 允许作为子定界组的一部分:

  path          = path-abempty    ; begins with "/" or is empty
/ path-absolute ; begins with "/" but not "//"
/ path-noscheme ; begins with a non-colon segment
/ path-rootless ; begins with a segment
/ path-empty ; zero characters

path-abempty = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty = 0<pchar>

segment = *pchar
segment-nz = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
; non-zero-length segment without any colon ":"

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

(...)

reserved = gen-delims / sub-delims

gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"

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

虽然您询问的是 URL 而不是更通用的 URI,但据我所知,URL 不会对路径段造成额外的限制。 Section 2.2然后,同一个 RFC 的文档继续声明保留字符应该进行百分比编码,除非在该组件中特别允许。但对于这种情况,根据上面的语法,子定界组(包含&)中的所有字符似乎都明确允许出现在路径段中。

但是,您遇到的问题与 URL 本身无关,而是与包含在 HTML 文档中时的文本表示有关。 & 符号不能单独出现在 HTML 中,必须始终进行编码。相关问题:Do I really need to encode '&' as '&amp;'?

关于java - URL 的 PATH 段中是否允许使用 "&"符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com