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

PHP使用SMPP包发送短信时UTF8字符破损乱码问题求助

原因分析

你当前使用的GsmEncoder::utf8_to_gsm0338方法生成的GSM 03.38编码仅支持拉丁字母、部分欧洲语言字符及少量符号,完全不兼容缅甸语(myn)字符,转码过程中就会丢失不被支持的字符,最终导致收到的短信出现乱码。

解决方案

需要更换为SMPP协议中对非GSM字符集通用的UCS2(即UTF-16BE)编码,同时指定对应的编码标识,修改代码如下:

  1. 替换编码逻辑:
// 无需转GSM 03.38,直接将UTF-8的缅甸语内容转为UCS2编码
$encodedMessage = mb_convert_encoding($message, 'UTF-16BE', 'UTF-8');
  1. 调用sendSMS方法时指定data_coding参数为8(对应UCS2编码):
// 第六个参数为data_coding,设为8即可告知SMPP中心按UCS2解码内容
$smpp->sendSMS($from, $to, $encodedMessage, null, null, 8);

注意事项

  • UCS2编码的单条短信最多支持70个字符,若内容长度超过限制,需要按长短信规则拆分,常用的SMPP扩展包通常会自动处理该逻辑,若你的包无自动拆分能力需自行实现,避免超长部分丢失或乱码。
  • 提前确认你的SMPP服务运营商支持UCS2编码,绝大多数主流运营商均默认支持,部分小众地区可能需要单独开通对应权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:36:00