例如,我经常看到这个URL出现。
https://ghbtns.com/github-btn.html?user=example&repo=card&type=watch&count=true
&
是&
还是应该/可以保留为&
?
答案 0 :(得分:2)
&
用于编码HTML中的&符号 。
例如,在超链接中:
<a href="/github-btn.html?user=example&repo=card&type=watch&count=true">…</a>
(请注意,此only changes the link, not the URL。网址仍为/github-btn.html?user=example&repo=card&type=watch&count=true
。)
虽然您可以使用HTML中的&
对每个&
(内容的一部分)进行编码,但您只需要对ambiguous ampersands进行编码。
答案 1 :(得分:1)
来自rfc3986:
保留字符
URI包括由“保留”集中的字符分隔的组件和子组件。这些字符称为“保留”,因为它们可能(或可能不)通过通用语法,每种特定于方案的语法或URI的解除引用算法的特定于实现的语法定义为分隔符。
...
reserved = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
保留字符的目的是提供一组分隔符 与URI中的其他数据可区分的字符。的URI 用保留字符替换保留字符有所不同 相应的百分比编码八位字节不相等。 百分比编码保留字符,或解码百分比编码 对应于保留字符的八位字节,将改变如何 URI被大多数应用程序解释 ...
URI生成应用程序应该对数据八位字节进行百分比编码 除非这些字符对应于保留集中的字符 URI方案特别允许表示其中的数据 零件。如果在URI组件中找到保留字符 没有分隔角色对于该角色是已知的,那么它必须是 解释为表示与其对应的数据八位字节 字符在US-ASCII中的编码。
如果URL中的&
是值的一部分且没有分隔角色,则应对其进行编码。
这是使用urlencode()
函数的简单PHP代码片段:
<?php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>