如何在不更改的情况下在url中发送unicode值



我的一个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

最新更新