我的一个PHP短信应用程序我试图发送unicode字符,但它会在我的短信中提供一些不需要的字符。但当我尝试通过直接url发送时,它会给我完美的结果。我完全不知道我将如何在应用程序中实现。
我的应用程序代码生成以下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 的值
直接URL
http://sms.*****.com/reseller/sendsms.jsp?user=****&password=****&mobiles=******&sms=ಯುನಿಕೋಡ್&senderid=******&unicode=1
PHP字符串是字节。所以$message
包含以某种编码方式编码的文本。
仔细查看utf8_encode
的文档,它只有在输入字符串编码为ISO-8859-1时才有效。该字符集不能用拉丁语以外的脚本对文本进行编码,例如"ಯುನಿಕೋಡ್".
所以你必须知道$message
中的字节是用什么编码的。我们无法从您的示例代码中看出这一点。如果已经是UTF-8,则删除对utf8_encode
的调用。否则,您需要一个转换函数,其中还指定输入字符串的编码,如iconv
。