【问题标题】:Use of Parentheses in HTML with "href=tel:"在 HTML 中通过“href=tel:”使用括号
【发布时间】:2019-10-25 03:53:49
【问题描述】:

很惊讶,我在网上任何地方都找不到明确的答案:我正在设置一个翻译成法语的 HTML 页面,并使用以“+33 (0)”开头的不同联系号码。因为我不能亲自测试这个数字——一个规范的问题:我可以使用以<a href="tel:+33(0)..." 开头的锚标记,即括号中包含一个数字,其余数字跟在后面,并且链接可以工作吗?

【问题讨论】:

  • 为什么不能“亲自测试”?大多数移动应用程序只需打开输入号码的“电话”应用程序,无需拨号。与几乎所有关于“这行得通”的问题一样,通过尝试并查看它是否有效来找到答案......
  • 试试吧。电话实际上不会立即拨打电话,而是打开您的拨号盘。
  • 这实际上是个笑话——我实际上无法拨打那个号码,而且由于我在网上的任何地方都没有找到这个答案,但我虽然在这里肯定得到了答案,但值得发布题。尝试一个规范的答案真的值得投反对票吗?
  • @HereticMonkey,尊敬的我不同意 - “尝试并查看它是否有效”对于大多数 Web 开发案例来说不是一个好的解决方案,除非您有能力尝试它并查看它是否有效在设备和浏览器的每种组合上。当然,我们可能会大致了解某些情况下是否会起作用,但是 OP 正在寻找“确定的答案”。也许 jimiayler 可以指定“跨所有设备/浏览器”,但我认为“确定性”仍然可以很好地描述所寻求的内容。赞成这个问题。

标签: html href tel


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我阅读并记住正确的格式应该是: +33.1 23 45 67 89 但我找不到从哪里来。

    【讨论】:

      【解决方案3】:

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

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

      但是,如果我选择a href="tel:+000 (1) 000 000",点击手机上的链接后,我手机上的拨号会显示+0001000000 这是在Android设备上测试和确认的

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

      但这仍然可能因手机上的操作系统不同而有所不同。

      附注:

      如果您认为您号码中的+ 有问题...我也对此进行了测试,并且+ 没有任何意外行为。

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

      【讨论】:

      • 如标题所述,问题不在于加号的使用,而在于“括号的使用”。
      • 这个问题的标题是:“在 HTML 中使用带有“href=tel:”的括号”我认为这使问题变得简单——显然不是。我会将其添加到问题本身的正文中。
      • 对不起 mb,但是让我问你这个问题......在使用 href 时,括号对你来说是个问题吗? example.com/test(1).html ;)
      • 所以,我再次在寻找规范的东西——“试一试”/“它今天在我的手机上工作”很好,但不是我正在寻找的答案。这些是非数字字符,想要清楚地确定它们的标准似乎是合理的。这是我发布这个问题的唯一原因,我真的不得不再次反对因为错误的原因而被否决。
      • @jimiayler 我同意你的看法。我认为这是一个很好的问题,您得到的答案(“我刚刚测试过,效果很好”)并没有解决问题。
      【解决方案4】:

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

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

      生成 URI 的应用程序应该对数据八位字节进行百分比编码 对应于保留集中的字符除非这些字符 URI 方案特别允许在其中表示数据 组件。 如果在 URI 组件中找到保留字符并且 该字符没有已知的分隔角色,那么它必须是 解释为表示对应的数据八位字节 字符的 US-ASCII 编码。

      (强调我的)

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

      所以,是的,您可以在href="tel:" 链接中使用括号,它们应该适用于所有浏览器。但与现实世界中的任何网络标准一样,性能取决于每个浏览器是否正确实现了该标准。

      但是,关于您的示例 (<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>
      

      将/可能导致致电 +3301234567890。这仍然有效吗?可能是?我们现在正在进入电话号码路由领域。

      一些浏览器/设备可能很聪明,可以找出预期的内容并相应地进行调整,但我会谨慎行事,而是简单地使用:

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

      例如

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

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

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

      【讨论】:

      • 优秀的答案!这正是我一直在寻找的,并且感谢您的彻底回答。
      • 我担心省略括号会起作用。据我习惯(德国电话号码),使用国际号码时括号中的0应该省略:+331234567890,如果是国内电话则需要拨打01234567890
      • 但是如果您从国内线路拨打国际号码(即您在同一个国家/地区),您仍然可以连接。因此,坚持使用国际版本可能是确保电话:链接正常工作的最佳方式。
      • 我认为这是权威的:ITU-T E.123 第 7.2 节使用括号:“( ) 不应用于国际号码。”
      猜你喜欢
      • 2017-01-31
      • 2023-03-26
      • 2015-04-18
      • 2013-06-17
      • 1970-01-01
      • 2019-04-28
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多