SMS typically uses the GSM 03.38 character set, but can also be in UCS-2. If a message is in UCS-2, you can use these helper functions to convert it into the more useful UTF-8:
<?php function unicodeMessageDecode($message) { if (stripos($message, '@U') !== 0) { return $message; } $message = substr($message, 2); $_message = hex2bin($message); $message = mb_convert_encoding($_message, 'UTF-8', 'UCS-2'); return $message; } function unicodeMessageEncode($message){ return '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UCS-2','auto'))); } //hex2bin
requires PHP >= 5.4.0. // If, for whatever reason, you are using a legacy version of PHP, you can implementhex2bin
with this function: if (!function_exists('hex2bin')) { function hex2bin($hexstr) { $n = strlen($hexstr); $sbin = ""; $i = 0; while ($i < $n) { $a = substr($hexstr, $i, 2); $c = pack("H*", $a); if ($i == 0) { $sbin = $c; } else { $sbin .= $c; } $i += 2; } return $sbin; } }