【问题标题】:SMPP Receiver not Supporting Unicode TextSMPP 接收器不支持 Unicode 文本
【发布时间】:2023-04-02 19:13:01
【问题描述】:

我正在使用 SMPP Receiver API 从特定的 MSISDN 获取消息。我得到正确的英文文本。但达里语和普什图语文本的格式不同。它显示如下输出:
/
'2(�
/'HFD/1

我的代码是:

ob_start();
require_once "smpp.php";//SMPP protocol
//connect to the smpp server
$tx=new SMPP('IP',PORT);
//bind the receiver
$tx->system_type="NUll";
$tx->addr_npi=0;
$tx->bindReceiver("username","password");
do
{
//read incoming sms
  if($sms=$tx->readSMS())
  {
    print_r($sms);
  }
}while($sms);

而 smpp.php 位于:

http://121.100.50.58/apps/smpp/

如何获得正确的达里语和普什图语消息文本?

【问题讨论】:

    标签: php unicode sms sms-gateway smpp


    【解决方案1】:

    试试这个

    $utf8 = $body;
    
    $encodedMessage = mb_convert_encoding($utf8, "UCS-2", "utf8");
    $from = new SmppAddress($sender, SMPP::TON_ALPHANUMERIC);
    $to = new SmppAddress($number, SMPP::TON_INTERNATIONAL, SMPP::NPI_E164);
    
    $smppClient->sendSMS($from, $to, $encodedMessage, [], SMPP::DATA_CODING_UCS2);
    

    它完全适用于波兰语字符,我很确定它适用于所有 unicode。

    【讨论】:

      【解决方案2】:

      将 .php 脚本本身保存为 utf-8。这也必须与浏览器中的字符集一致。

      如果还是不行,请查看 mb_convert_encoding http://de2.php.net/manual/en/function.mb-convert-encoding.php

      【讨论】:

      • 嘿@biplav,还是有同样的问题。
      • @SushilKandola:你在哪里看到输出?它是在 telnet 上还是什么的,它可能不符合 utf8。你能把它写到一个文件中,然后用支持 Utf8 的编辑器打开吗?
      • 是的,我也写了文件,但格式相同。即使我将数据插入到 sql 数据库中,它也支持 UTF-8。
      • 您使用哪个编辑器查看文件。请通过joelonsoftware.com/articles/Unicode.html 了解 unicode 的工作原理。无论您收到什么垃圾都意味着内容存在,但您无法正确查看。
      • Biplav,如果我打印一些 Dari 和 Pashto Lang 的静态值,那么浏览器会显示完全相同的输出。我认为,SMPP 正在返回一些浏览器不理解的垃圾值。
      【解决方案3】:

      文本似乎是从 SMSC 以 UNICODE 格式发送的。这应该只是使用正确的编码和字符集的问题......尝试使用字符集 UTF16-BE 和编码 UCS2

      【讨论】:

      • SMPP 响应不是 Unicode,不同语言的响应不同。由于浏览器支持 Unicode 和 UTF-8,所以它应该以相同的格式返回所有输出。即使我使用 UTF-16-BE 解码,它也会返回英文文本的垃圾值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2021-12-29
      • 2013-05-14
      • 2011-04-15
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多