我的一个PHP短信应用程序我试图发送unicode字符,但它会在我的短信中给出一些不需要的字符。但是当我尝试通过直接网址发送时,它会给我完美的结果。我完全混淆了如何在我的应用程序中实现。
我的应用程序代码生成在url下面
function sendMsg($message,$contactNo)
{
$ch = curl_init();
$rno = urlencode(utf8_encode($contactNo));
$txt = urlencode(utf8_encode($message));
$txt=preg_replace('/%0A/',"", $txt);
curl_setopt($ch,CURLOPT_URL,"http://sms.*****.com/reseller/sendsms.jsp?user=****&password=****&mobiles=******&sms=$txt&senderid=******&unicode=1");
$buffer = curl_exec($ch);
curl_close($ch);
if($buffer==FALSE){
return FALSE;
}else{
return TRUE;
}
}
我得到的价值是txt =%E5%BC%95%E3%81%8D%E5%89%B2%E3%82%8A
直接网址
http://sms.*****.com/reseller/sendsms.jsp?user=****&password=****&mobiles=******&sms=ಯುನಿಕೋಡ್&senderid=******&unicode=1
答案 0 :(得分:0)
PHP字符串是 bytes 。因此$message
包含以某种编码方式编码的文本。
仔细查看utf8_encode
的文档,它仅在输入字符串编码为ISO-8859-1时有效。该字符集不能对拉丁文以外的脚本中的文本进行编码,例如“ಯುನಿಕೋಡ್”。
所以你必须知道在$message
中用什么编码来编码字节。我们无法从您的示例代码中分辨出来。如果它已经是UTF-8,则删除对utf8_encode
的呼叫。否则,您需要一个转换函数,您还可以在其中指定输入字符串的编码,例如iconv
。