三天前,我开始制作一个简单的应用程序来发送短信。我已经测试了它并且它在GSM CSCS模式下工作,但是当我将它切换到UCS2时它没有显示西里尔字母
<?php
error_reporting(E_ALL);
$fp = fopen("/dev/ttyUSB0", 'w+');
$msg = strtoupper(bin2hex(mb_convert_encoding("Тест", "UCS-2", "UTF-8")));
$number_raw = "+359000000000";
$number = bin2hex(mb_convert_encoding($number_raw, "UCS-2", "UTF-8"));
echo $number."<br>";
echo $msg;
$debug = false;
if(!$fp || $debug){
//echo "Can not open!";
}else{
fwrite($fp, "AT+CMGF=1".chr(13)); // OK
sleep(5);
fwrite($fp, 'AT+CSCS="UCS2"'.chr(13)); // OK
sleep(5);
fwrite($fp, 'AT+CMGS="'.$number.'"'.chr(13)); // OK
sleep(5);
fwrite($fp, $msg.chr(26)); // ERROR 500
echo "<br>Sent";
}
?>
根据此来源正确编码数字和消息:http://www.columbia.edu/kermit/ucs2.html
发送邮件时,我会收到邮件(因此编号正确)但内容显示不正确。
这种行为的可能原因是什么,可能是我的PHP文件编码?另外为什么linux找到3个GSM tty设备?
答案 0 :(得分:0)
删除所有可怕的sleep
调用并实施正确的最终响应解析后,您需要修复AT + CMGS的waiting for the "\r\n> "
响应的解析。
没有任何修复,字符集编码麻烦是一个非常小的问题。当您运行AT+CSCS="UCS2"
时,每个字符串将由调制解调器以这种方式进行编码,并且必须按照您的方式进行编码,直到永久(或选择其他字符集)为止,例如切换从UCS2到UTF-8将是AT+CSCS="005500540046002D0038"
而不是AT+CSCS="UTF-8"
。