令我惊讶的是,我在网上找不到关于此问题的明确答案:我正在设置一个法语翻译的 HTML 页面,并使用以“+33 (0)”开头的不同联系号码。因为我无法亲自在这个数字上测试它 - 一个规范的问题:我可以摆脱以<a href="tel:+33(0)..."ie 开头的锚标记,其中括号中包含一个数字,后面跟着其余的数字并使链接有效吗?
好问题。找到一个明确的、权威的具体答案href="tel:"是很困难的。
RFC 3986(第 2.2 节)将括号定义为“保留的子分隔符”。这意味着它们在 URL 的某些部分使用时可能具有特殊含义。RFC 说:
生成 URI 的应用程序应对与保留集中的字符相对应的数据八位字节进行百分比编码,除非URI 方案特别允许这些字符表示该组件中的数据。 如果在 URI 组件中找到保留字符,并且该字符没有已知的定界角色,则必须将其解释为表示与 US-ASCII 中该字符的编码相对应的数据八位字节。
(强调我的)
基本上,您可以在 URL 中使用US-ASCII 字符集中的任何字符。但是,在某些情况下,括号保留用于特定用途,在这些情况下,它们应该进行百分比编码。否则,它们可以保持原样。
所以,是的,您可以在链接中使用括号href="tel:",并且它们应该适用于所有浏览器。但与现实世界中的任何 Web 标准一样,性能依赖于每个浏览器正确实现该标准。
但是,关于您的示例(<a href="tel:+33(0)...),我会避开您给出的格式,即:
[country code]([substituted leading 0 for domestic callers])[area code][phone number]
虽然我无法找到浏览器如何处理此类情况的明确指南,但我想您会发现,正如 @DigitalJedi 指出的那样,某些(也许是全部?)浏览器会去掉括号并保留其中包含的数字,最终导致数字不正确,例如
<a href="tel:+33(0)1234567890">+33 (0) 123 456 7890</a>
Run Code Online (Sandbox Code Playgroud)
...这可能会导致拨打 +33 0 1234567890。
这仍然有效吗?或许?我们现在正在进入电话号码路由领域。
某些浏览器/设备可能足够聪明,能够弄清楚其意图并相应地进行调整,但我会谨慎行事,而是简单地使用:
[country code][area code][phone number],例如
<a href="tel:+331234567890">+33 123 456 7890</a>
Run Code Online (Sandbox Code Playgroud)
或者
<a href="tel:+331234567890">(0) 123 456 7890</a>
Run Code Online (Sandbox Code Playgroud)
让您的本地用户拨打国际国家/地区代码没有任何缺点(据我所知) - 这将导致与他们省略它并替换前导零相同的结果。
作为旁注,根据 ITU(国际电信联盟)E.123 文件第 7.2 节,
国际号码中不应使用 ( )。
此建议涉及电话号码的书写方式,但与创建链接时应使用的文本具有一定的相关性href="tel:",这也是我在上面提供的两个替代示例的原因。
(此半相关信息归功于@NiKiZe)。
最后,这里有一些关于浏览器处理电话链接的半相关的有用信息:https://css-tricks.com/the-current-state-of-telephone-links/
| 归档时间: |
|
| 查看次数: |
7791 次 |
| 最近记录: |