在 HTML 和 "href=tel:" 中使用括号

Use of Parentheses in HTML with "href=tel:"

很惊讶我无法在网上的任何地方找到关于此问题的明确答案:我正在设置翻译成法语的 HTML 页面,其中包含以“+33 (0)”开头的不同联系电话。因为我不能在这个数字上亲自测试它 - 一个典型的问题:我可以摆脱以 <a href="tel:+33(0)..." 开头的锚标记,即括号中包含一个数字,其余数字紧随其后,并具有 link工作?

href属性中的()应该问题不大:(href-wise)

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

但是,如果我这样做 a href="tel:+000 (1) 000 000",在 phone 上单击 link 后,phone 上的表盘将显示 +0001000000 这是在Android设备

上测试和确认的

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

但由于 phone 上的 OS 不同,这仍然会有所不同。

P.S.:

如果你觉得你号码中的+有问题...我也测试过这个+没有任何问题意外行为。

更多:href="tel:" and mobile numbers

好问题。找到关于 href="tel:" 的明确、权威的答案特别困难。

RFC 3986 (Section 2.2)定义括号为"reserved sub-delims"。这意味着它们 可能 在 URL 的某些部分使用时具有特殊含义。 RFC 说:

URI producing applications should percent-encode data octets that correspond to characters in the reserved set unless these characters are specifically allowed by the URI scheme to represent data in that component. If a reserved character is found in a URI component and no delimiting role is known for that character, then it must be interpreted as representing the data octet corresponding to that character's encoding in US-ASCII.

(强调我的)

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

所以,是的,您可以在 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>

will/may 导致呼叫 +3301234567890。这仍然有效吗?可能是?我们现在进入 phone 号码路由区域。

有些 browsers/devices 可能足够聪明,能够弄清楚意图并相应地进行调整,但我会谨慎行事,而只是简单地使用:

[country code][area code][phone number]

例如

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

让您的本地用户拨打国际国家代码没有任何缺点(据我所知)- 结果与省略它并替换前导零的结果相同。

这里有一些关于浏览器处理 telephone 链接的半相关的有用信息:https://css-tricks.com/the-current-state-of-telephone-links/

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

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

The ( ) should not be used in an international number.

所以 (0) 根本不应该包括在内。