【问题标题】:Converting SMS encoding to UTF-8 in PHP在 PHP 中将 SMS 编码转换为 UTF-8
【发布时间】:2013-01-23 13:32:41
【问题描述】:
我用 PHP 编写了一个 SMPP 服务器收发器。
我从我的 SMPP 中得到这个 SMS 字符串。这是一条 UTF8 消息,实际上是 7Bit。这是一个示例消息:
5d30205d30205d3
我知道如何转换它。应该是:
\x5d3\x020\x5d3\x020\x5d3
我不想自己写。我想已经有一个功能可以为我做到这一点。一些隐藏的 iconv 或使用 pack() / unpack() 将此字符串转换为正确的格式。
我正在尝试使用 PHP 来实现这一点。
有什么想法吗?
谢谢。
【问题讨论】:
标签:
php
encoding
sms
smpp
7-bit
【解决方案1】:
应该这样做:
$message = "5d30205d30205d3";
echo "\x".implode("\x", str_split($message, 3));
// \x5d3\x020\x5d3\x020\x5d3
【解决方案2】:
这是我最终使用的:
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');
}
10 倍。全部。