【发布时间】:2016-04-28 20:18:27
【问题描述】:
在 URI 中,空格可以编码为 +。既然如此,那么在创建国际前缀的tel URI时,是否应该对前导加号进行编码?
哪个更好?两者在实践中都有效吗?
<a href="tel:+1234">Call me</a>
<a href="tel:%2B1234">Call me</a>
【问题讨论】:
在 URI 中,空格可以编码为 +。既然如此,那么在创建国际前缀的tel URI时,是否应该对前导加号进行编码?
哪个更好?两者在实践中都有效吗?
<a href="tel:+1234">Call me</a>
<a href="tel:%2B1234">Call me</a>
【问题讨论】:
没有。
来自 RFC 3966 的 section 3(电话号码的 tel URI):
如果保留字符“+”、“;”、“=”和“?”用作“tel”URI 的组成部分之间的分隔符,它们不得进行百分比编码。
如果 + 是参数值的一部分,您只会对它进行百分比编码:
如果这些字符 ["+"、";"、"=" 和 "?"] 出现在 tel URI 参数值中,则必须进行百分比编码。
我不确定前面的+(表示它是global number)是否算作分隔符,但全局数字的定义说:
全球唯一编号由前导“+”字符标识。
所以它指的是+,而不是百分比编码的东西。
还有examples 明确表示它不应该是百分比编码的,例如:
tel:+1-201-555-0123
请注意,tel URI 中的空格(例如,在参数值中)可能不会使用 + 进行编码。使用+ 代替%20 作为空格字符不是任何URI 都可以做到的;只有在 URI 方案明确定义的 URI 中才有可能。
【讨论】:
tel: URI 方案没有编码空格的规定 - 请参阅 RFC 3966:
5.1.1. Separators in Phone Numbers
...
even though ITU-T E.123 [E.123] recommends the use of space
characters as visual separators in printed telephone numbers, "tel"
URIs MUST NOT use spaces in visual separators to avoid excessive
escaping.
加号仅在application/x-www-form-urlencoded 中专门对空格进行编码(表单提交的默认内容类型 - 请参阅W3C info re: forms)。没有有效的方法来编码 tel: URI 中的空格。请再次参阅 RFC 3966(第 5 页)了解有效的可视分隔符。
【讨论】: