SMPP SMS-Off UTF8 Support CODE
function getString(&$ar, $maxlen = 255, $firstRead = false, $encoding = 3)
{
	$s = "";
	$i = 0;
	$rep = 1;
	if ($encoding == 8) {
		$rep = 2;
	}
	do {
		$c = 0;
		for($rc = 0; $rc < $rep; $rc ++) {
			$c += ($firstRead && $i == 0) ? current($ar) : next($ar);
			$i++;
		}
		if ($encoding == 8) {
            if ($c >= 224 && $c <= 256) {
                $c += 4080;
            }
		}
		if ($c != 0) {
			$s .= mb_chr($c);
		}
	} while ($i < $maxlen && $c != 0);
	
	return $s;
}

$ar = unpack("C*", hex2bin('0001013939353539383235313533340000013930323237000000000000000008004a004800650079002010d010d110d210d310d410d510d610d710d810d910da10db10dc10dd10de10df10e010e110e210e310e410e510e610e710e810e910ea10eb10ec10ed10ee10ef10f00204000200a2'));

$service_type = getString($ar, 6, true); // 6

$source_addr_ton = next($ar); // 7
$source_addr_npi = next($ar); // 8
$source_addr = getString($ar, 21); // 29

$dest_addr_ton = next($ar); // 30
$dest_addr_npi = next($ar);
$destination_addr = getString($ar, 21); // 52

$esmClass = next($ar);
$protocolId = next($ar);
$priorityFlag = next($ar);
next($ar); // schedule_delivery_time
next($ar); // validity_period 
$registeredDelivery = next($ar);
next($ar); // replace_if_present_flag 
$dataCoding = next($ar); // 60
next($ar); // sm_default_msg_id 
$sm_length = next($ar);
$message = getString($ar, $sm_length, false, $dataCoding);

var_dump('encoding: '.$dataCoding, 'length: ' . $sm_length, 'msg:' . $message);
by Valeri Tandilashvili
2 months ago
PHP
SMPP
0
Pro tip: use ```triple backticks around text``` to write in code fences