HTML中使用带有“href = tel:”的括号

3

我很惊讶在网上找不到关于这个问题的明确答案:我正在设置一份翻译成法语的HTML页面,其中包含一个以“+33(0)”开头的不同联系电话。由于我无法亲自测试此号码,这是一个经典问题:我是否可以使用以括号中包含数字并带有其余数字的锚标签 <a href="tel:+33(0)..." 并使链接正常工作?


1
只需尝试。手机不会立即拨打电话,而是打开您的拨号界面。 - DigitalJedi
2
这实际上有点玩笑 -- 我其实无法拨打那个号码,由于我没有在任何在线资源中找到答案,所以我想将这个问题发布在这里得到明确的答案是值得的。试图获得一个规范化的答案真的值得被踩吗? - jimiayler
4
@HereticMonkey,恕我不同意-“试一试看是否有效”对于大多数Web开发情况来说并不是一个好的解决方案,除非您有能力在各种设备和浏览器的每个组合上尝试并查看其有效性。当然,我们可能会对某些情况下的工作情况有一个大致的想法,但OP正在寻找一个“明确的答案”。也许jimiayler可以指定“跨所有设备/浏览器”,但我认为“明确的”仍然相当描述了所追求的内容。支持此问题。 - Luke
4个回答

6

很好的问题。关于href="tel:"的明确且权威的答案很难找到。

RFC 3986 (Section 2.2) 定义圆括号为“保留子分隔符”。这意味着当它们在URL的某些部分中使用时,它们可能具有特殊含义。RFC说:

URI生成应用程序应该对与保留集中字符对应的数据八位组进行百分号编码,除非这些字符被URI方案明确允许用于表示该组件中的数据。如果在URI组件中发现保留字符,并且该字符没有已知的分隔角色,则必须将其解释为表示与US-ASCII中该字符编码对应的数据八位组。

(重点是我)

基本上,在URL中可以使用US-ASCII字符集中的任何字符。但是,在某些情况下,圆括号被保留用于特定用途,在这些情况下,它们应该进行百分号编码。否则,它们可以保留原样。

所以,是的,您可以在href="tel:"链接中使用括号,并且它们应该适用于所有浏览器。但是,像现实世界中的任何Web标准一样,性能取决于每个浏览器正确实现该标准。
然而,关于您的示例(<a href="tel:+33(0)...),我建议避免使用您提供的格式,即:

[国家代码]([替换为国内呼叫者的前导零] [地区代码] [电话号码])

虽然我无法找到关于浏览器如何处理此类情况的明确指南,但我认为您会发现,正如@DigitalJedi所指出的那样,一些(或许全部?)浏览器将剥离括号并保留其中包含的数字,最终导致错误的号码,例如:

<a href="tel:+33(0)1234567890">+33 (0) 123 456 7890</a>

...这可能会导致拨打+3301234567890的电话。

这还有效吗?也许?现在我们涉及到电话号码路由领域了。

一些浏览器/设备可能足够聪明,能够理解所需内容并相应地进行调整,但我建议安全起见,改为使用:

[国家代码][区号][电话号码],例如:

<a href="tel:+331234567890">+33 123 456 7890</a>

或者

<a href="tel:+331234567890">(0) 123 456 7890</a>

据我所知,让本地用户拨打国际区号没有任何负面影响 - 这将导致与省略国际区号并替换前导零相同的结果。


作为一个侧面的注释,根据国际电信联盟(ITU)E.123文件第7.2节,国际号码中不应使用( )。这个建议涉及电话号码的书写方式,但在创建href="tel:"链接时使用的文本方面有一定的相关性,这也是我提供了两个替代示例的原因。(感谢@NiKiZe提供的这个半相关信息)。

最后,这是一些关于电话链接的半相关、有用的信息:https://css-tricks.com/the-current-state-of-telephone-links/


2
非常好的回答!这正是我在寻找的,我感激你回答得如此详尽。 - jimiayler
1
我担心省略括号会起作用。就我所知(对于德国电话号码),在使用国际号码时,括号中的0应该被省略:+331234567890,如果是国内电话,则需要拨打01234567890。 - AnnetteC
1
但是,如果您从国内拨打国际号码(即您在同一个国家),您仍然可以接通。因此,坚持使用国际版本可能是确保电话链接正常工作的最佳方法。 - Luke
1
我认为这是权威的:ITU-T E.123 第7.2节括号的使用:“在国际号码中不应使用 ( )。” - NiKiZe

0

href 属性中的 () 不应该是问题:(从 href 的角度来看)

http://example.com/test(1).html

然而,如果我使用 a href="tel:+000 (1) 000 000",在手机上点击链接后,我的手机拨号将显示 +0001000000这已在Android设备上测试并确认。

这意味着括号和空格被移除了。

但由于不同的手机操作系统,结果仍可能有所不同。

P.S.:

如果你认为数字中的+是个问题... 我也测试过了+没有任何意外的行为。

更多信息:href="电话:"和手机号码


2
正如标题所示,这个问题不是关于加号的使用,而是关于“括号”的使用。 - jimiayler
1
这个问题的标题是:“在HTML中使用括号和“href=tel:””。我认为这使问题变得简单明了 - 显然不是。我将把它添加到问题本身的正文中。 - jimiayler
1
抱歉,让我问一下...在使用href时,括号对你造成过问题吗?http://example.com/test(1).html ;) - DigitalJedi
2
所以,我再次寻找一些规范的东西——“只是尝试”/“今天在我的手机上工作了”是可以的,但不是我要寻求的答案。这些是非数字字符,想要清楚地确定它们的标准似乎是合理的。这就是我发布这个问题的唯一原因,我真的必须再次反对因为错误的原因而被投票否决。 - jimiayler
1
@jimiayler 我同意你的观点。我认为这是一个很好的问题,而且你得到的答案(“我刚刚测试了一下,它运行得很好”)并不足够解决问题。 - Luke
显示剩余3条评论

-1
根据ITU-T E.123第7.2节使用括号的规定:

国际号码中不应使用 ( )。

因此,(0) 不应包含在内。

-2

我读过并记得正确的格式应该是: +33.1 23 45 67 89 但我找不到来源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接