在PHP中将SMS编码转换为UTF-8

在PHP中将SMS编码转换为UTF-8,php,encoding,sms,smpp,7-bit,Php,Encoding,Sms,Smpp,7 Bit,我用PHP编写了一个SMPP服务器收发器。 我从SMPP中获取此SMS字符串。这是一条UTF8消息,实际上是7Bit。下面是一条示例消息: 5d30205d30205d3 我知道如何转换它。应该是: \x5d3\x020\x5d3\x020\x5d3 我不想自己写。我想已经有一个函数为我实现了这一点。某些隐藏的iconv或使用pack()/unpack()将此字符串转换为正确的格式 我试图用PHP实现这一点。 有什么想法吗 谢谢。这应该可以做到: $message = "5d3020

我用PHP编写了一个SMPP服务器收发器。 我从SMPP中获取此SMS字符串。这是一条UTF8消息,实际上是7Bit。下面是一条示例消息:

  5d30205d30205d3
我知道如何转换它。应该是:

  \x5d3\x020\x5d3\x020\x5d3
我不想自己写。我想已经有一个函数为我实现了这一点。某些隐藏的iconv或使用pack()/unpack()将此字符串转换为正确的格式

我试图用PHP实现这一点。 有什么想法吗

谢谢。

这应该可以做到:

$message = "5d30205d30205d3";
echo "\x".implode("\x", str_split($message, 3));
// \x5d3\x020\x5d3\x020\x5d3

以下是我最终使用的:

public static function sms__from_unicode($message)
{
    $org_msg = str_split(strtolower($message), 3);
    for($i = 0;$i < count($org_msg); $i++)
        $org_msg[$i] = "\u0{$org_msg[$i]}";

    $str = implode(null, $org_msg);
    $str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str);    
    return $str;
}   

function replace_unicode_escape_sequence($match) {
     return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
来自unicode($message)的公共静态函数sms { $org\u msg=str\u split(strtolower($message),3); 对于($i=0;$i 10倍。所有。

可能的副本: