You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kannel发送含#符号短信返回403不可路由问题如何解决

Kannel发送含#号短信403错误解决指南

是否和PHP脚本有关?

是,90%以上的这类报错都是PHP侧没有正确处理URL特殊字符导致的。
#是HTTP URL中的保留字符,作为锚点标记使用,如果你是通过GET请求调用Kannel的HTTP接口,#及之后的内容不会被发送到Kannel服务端,Kannel收到的短信内容缺失,路由校验失败就会返回403 "Not routable. Do not try again."。

解决方法

  • 对短信内容做URL编码
    发送前使用PHP内置的urlencode()函数处理短信内容,#会被转义为%23,避免被截断,示例代码:
    // 原始短信内容
    $content = '*100*1238#';
    // 编码后再作为参数传入Kannel请求
    $safe_content = urlencode($content);
    
    Kannel收到请求后会自动解码还原原始短信内容,不影响最终展示。
  • 改用POST请求调用Kannel接口
    GET请求参数拼接在URL中容易触发特殊字符问题,改为POST方式将参数放在请求体中提交,不需要额外编码也不会出现#被截断的问题,更适合发送包含特殊符号的短信。
  • 检查Kannel配置
    如果以上操作后仍然报错,需要检查Kannel的配置文件:
    1. 确认路由规则没有拦截包含#的短信内容
    2. 检查allowed-prefix、denied-prefix等过滤规则没有限制USSD格式(*开头#结尾)的内容下发
    3. 确认对接的上游运营商网关允许发送含#的短信内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:39:03