You need to enable JavaScript to run this app. Android端HTML tel链接携带USSD代码时加号丢失问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Android端HTML tel链接携带USSD代码时加号丢失问题咨询

Android 端 tel 链接丢失拨号串中+字符的解决方案

问题根因

双端解析逻辑存在差异是问题出现的核心原因:

  • iOS的WebKit引擎严格遵循RFC3966电话URI规范解析链接,可正确还原转义后的+字符,因此相同链接在iOS上表现正常
  • 部分Android系统、内置浏览器未遵循该规范,沿用传统HTTP URL的解析规则,将编码位置的+按照空格语义做了过滤/替换;加之原写法仅对+、#做了零散转义,未对拨号串内所有特殊字符做统一编码,放大了解析异常的概率,最终传入拨号器的内容丢失了+字符,与预期不符。

兼容实现方案

  • 按照RFC3966规范对完整拨号串做全量逐字符编码,避免零散手动转义:
    各特殊字符的对应编码为:
    • 数字字符无需编码
    • * 编码为 %2A
    • + 编码为 %2B
    • # 编码为 %23
      针对目标USSD串**67*+111#,最终生成的标准兼容链接为:
    <a href="tel:%2A%2A67%2A%2B111%2A%23">唤起USSD拨号</a>
    
  • 老旧定制Android系统的兼容兜底:
    部分4.x~7.x版本的第三方定制ROM对%2B的解析存在已知bug,可对+的编码做二次转义,让浏览器解析一轮后还原为拨号器可识别的编码值,对应写法为:
    <a href="tel:%2A%2A67%2A%252B111%2A%23">唤起USSD拨号</a>
    
  • 链接格式注意事项:
    不要在tel链接中附加任何查询参数(如带?的附加字段),部分Android系统遇到带查询段的tel链接时,会直接截断特殊字符的解析逻辑,提升字符丢失的概率。

内容的提问来源于stack exchange,提问作者Rabochiy Rabochiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 14:24:04