应该对tel URI中的加号进行编码吗?

时间:2016-01-22 09:28:33

标签: uri tel

在URI中,空格可以编码为+。既然如此,那么在创建具有国际前缀的tel URI时,是否应该对前导加编码?

哪个更好?两者都在实践中工作吗?

<a href="tel:+1234">Call me</a>
<a href="tel:%2B1234">Call me</a>

2 个答案:

答案 0 :(得分:2)

没有

来自RFC 3966的section 3电话号码的电话号码):

  

如果保留字符&#34; +&#34;,&#34;;&#34;,&#34; =&#34;,&#34;?&#34;用作&#34; tel&#34;的组件之间的分隔符。 URI,它们不能是百分比编码。

如果它是参数值的一部分,您只需对+进行百分比编码:

  

这些字符[&#34; +&#34;,&#34;;&#34;,&#34; =&#34;和&#34;?&#34;]必须是百分比如果它们出现在tel URI参数值中,则进行编码。

我不确定指示它是global number的前导+是否被视为分隔符,但全局数字的定义是:

  

全球唯一的数字由领先的&#34; +&#34;字符。

所以它指的是+,而不是百分比编码的东西。

此外examples明确指出它不应该是百分比编码,例如:

tel:+1-201-555-0123

请注意,tel URI中的空格(例如,参数值中的空格)可能无法使用+进行编码。对于空格字符使用+而不是%20不是可以在任何URI中完成的事情;它只能在其URI方案明确定义的URI中使用。

答案 1 :(得分:1)

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:URIs中编码空格没有有效的方法。有关有效的可视分隔符,请再次参阅RFC 3966(第5页)。