Files
web.ems/wxc2_omc/account/cdrList/showSmscContent.php
agtuser 16a3fd1e1b init
2024-11-11 17:56:00 +08:00

176 lines
4.1 KiB
PHP
Executable File

<?php
function u2utf8($c)
{
for($i=0;$i<count($c);$i++)
$str="";
/*
if ($c < 0x80) {
//$str.=(0x80 | $c>>6);
$str .= $c;
}
else
*/
if ($c < 0x800) {
$str.=(0xC0 | $c>>6);
$str.=(0x80 | $c & 0x3F);
}
else if ($c < 0x10000) {
$str.=(0xE0 | $c>>12);
$str.=(0x80 | $c>>6 & 0x3F);
$str.=(0x80 | $c & 0x3F);
}
else if ($c < 0x200000) {
$str.=(0xF0 | $c>>18);
$str.=(0x80 | $c>>12 & 0x3F);
$str.=(0x80 | $c>>6 & 0x3F);
$str.=(0x80 | $c & 0x3F);
}
return $str;
}
function chkDiffChr($inChr)
{
switch($inChr)
{
case 2:
$outChr = 36;//'$'
break;
case 0:
$outChr = 64;//'@'
break;
case 17:
$outChr = 95;//'_'
break;
// case 47:
// $outChr = 92;//'/'
// break;
default:
return($inChr);
}
return($outChr);
}
function decode7bitTo8bit($in_buffer)
{
$DEBUG=0;
$out_buffer="";
$len_of_data=strlen($in_buffer);
$in_buffer_len = ($len_of_data+1)*8/7;
if($DEBUG) echo "<br>in_buffer_len=$in_buffer_len";
for ($i=0; $i<$in_buffer_len; $i+=14)
{
$len_of_data=strlen($in_buffer);
$tmp7byte=substr($in_buffer,0,($len_of_data >= 14 ? 14 : $len_of_data));
if($DEBUG) echo "<br>tmp7byte=$tmp7byte";
$out_buffer .= decode7byteTo8byte($tmp7byte);
if($DEBUG) echo "<br>out_buffer=$out_buffer";
$in_buffer=substr($in_buffer,14);
if($DEBUG) echo "<br>in_buffer=$in_buffer,i=$i";
}
return($out_buffer);
}
function decode7byteTo8byte($Str)
{
$DEBUG=0;
$len_of_data=strlen($Str);
$len_of_byte=0;
for ($i=0;$i<$len_of_data;$i+=2)
{
$in_buffer[$len_of_byte]=hexdec(substr($Str,$i,2));
if($DEBUG) echo "<br>in_buffer[$len_of_byte]={$in_buffer[$len_of_byte]}";
$len_of_byte++;
}
$out_buffer='';
for ($i=0;$i<$len_of_byte;$i++)
{
switch ($i)
{
case 0:
$out_buffer .= chr(chkDiffChr(($in_buffer[0]) & 0x7f));
if($DEBUG) echo "<br>outChar=$outChar out_buffer=$out_buffer";
break;
case 1:
$out_buffer .= chr(chkDiffChr((($in_buffer[1] & 0x3f) << 1 ) | (($in_buffer[0] >> 7) & 0x01)));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
break;
case 2:
$out_buffer .= chr(chkDiffChr((($in_buffer[2] & 0x1f) << 2 ) | (($in_buffer[1] >> 6) & 0x03)));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
break;
case 3:
$out_buffer .= chr(chkDiffChr((($in_buffer[3] & 0x0f) << 3 ) | (($in_buffer[2] >> 5) & 0x07)));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
break;
case 4:
$out_buffer .= chr(chkDiffChr((($in_buffer[4] & 0x07) << 4 ) | (($in_buffer[3] >> 4) & 0x0f)));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
break;
case 5:
$out_buffer .= chr(chkDiffChr((($in_buffer[5] & 0x03) << 5 ) | (($in_buffer[4] >> 3) & 0x1f)));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
break;
case 6:
$out_buffer .= chr(chkDiffChr((($in_buffer[6] & 0x01) << 6 ) | (($in_buffer[5] >> 2) & 0x3f)));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
if ( $in_buffer[6] >> 1 )
{
$out_buffer .= chr(chkDiffChr(($in_buffer[6] >> 1) & 0x7f));
if($DEBUG) echo "<br>out_buffer=$out_buffer";
}
break;
default:
break;
}
}
return($out_buffer);
}
function encodeUTF8($smsContent,$smsDCS)
{
if(!trim($smsContent))
return $smsContent;
//echo "smsDCS=$smsDCS";
$encodeType=substr(decbin($smsDCS),-4,-2);
//echo "encodeType=$encodeType";
switch($encodeType){
case '00':$encodeStr=decode7bitTo8bit($smsContent);
case '0':$encodeStr=decode7bitTo8bit($smsContent);
case '':$encodeStr=decode7bitTo8bit($smsContent);
return($encodeStr);
case '01':
case '10':
$encodeStr=$smsContent;
break;
default: return('');
}
$utf8="";
$rrr="";
while($encodeStr){
$now=substr($encodeStr,0,4);
//echo "<BR>this=$this";
$trr="&#x".$now.";";
$rrr.=$trr;
$utf8.=u2utf8(hexdec($now));
$encodeStr=substr($encodeStr,4,strlen($encodeStr));
//echo "<BR>utf8-1=$utf8,encodeStr=$encodeStr";
}
return $rrr;
/*
//echo "<BR>utf8=$utf8";
$ret="";
for($i=0;$i<strlen($utf8);$i+=3)
$ret.=chr(substr($utf8,$i,3));
return $ret;
*/
}
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
//$UTF8Str=encodeUTF8($smsContent,$smsDCS);
//echo "$UTF8Str";
?>