AJAX请求不发送阿拉伯字符

时间:2011-11-25 20:12:35

标签: php javascript jquery character-encoding

我写了jQuery帖子向服务器发送请求,让客户知道他们的名字以该请求开头,但问题是它只发送英文字符 这是邮政编码

console.log("1 - "+inputString); //return Arabic right
console.log("2 - "+decodeURIComponent(inputString)); //return arabic right
console.log("3 - "+encodeURIComponent(inputString)); //encoded Arabic 
inputString = decodeURIComponent(inputString); 
console.log(inputString); //also arabic right
$.post("<?= base_url(); ?>admin/customers/get_customer/"+inputString, function(data){
                alert(data); 
                if(data.length >0) {
                    $('#suggestions').show();
                    $('#autoSuggestionsList').html(data);
                }
            });

在服务器端

function get_customer($customer)
    {
        header ('Content-type: text/html; charset=utf-8');
        die($customer." - - ".utf8_decode($customer)." - - ".utf8_encode($customer)); //just for testing and all returns encoded characters 

        $query = mysql_query("SELECT * FROM customers WHERE customer_name LIKE '$customer%' LIMIT 10") or die(mysql_error());
        $str = ""; 
        while ($result = mysql_fetch_object($query) ):
            $str .= '<li onClick="fill(\''.$result->customer_id.'\',\''.$result->customer_name.'\');">'.$result->customer_name.' </li>';
        endwhile;
        echo $str; 

    }

视图文件中的字符集是HTML&amp;的utf-8。 PHP 此外,jquery的charset是UTF-8 那么问题是什么

3 个答案:

答案 0 :(得分:2)

这有两个部分我认为问题中的例子和你的解决方案都没有完全显示出来。 URL只能包含ASCII字符,因此唯一的选择是在发送请求之前对阿拉伯语部分进行编码。在构建网址时,您需要这样的内容:

$.post("<?= base_url(); ?>.../"+encodeURIComponent(inputString), function(data){
  // ...
});

您的解决方案显示的第二部分是解码服务器端的数据:

function get_customer($customer) {
  $customer = urldecode($customer);
  // ...
}

答案 1 :(得分:0)

我已经解决了这是我的解决方案

function get_customer($customer)
    {
        header ('Content-type: text/html; charset=utf-8');
        $customer = urldecode($customer);//this is the solution decode the url 
        $query = mysql_query("SELECT * FROM customers WHERE customer_name LIKE '$customer%' LIMIT 10") or die(mysql_error());
        $str = ""; 
        while ($result = mysql_fetch_object($query) ):
            $str .= '<li onClick="fill(\''.$result->customer_id.'\',\''.$result->customer_name.'\');">'.$result->customer_name.' </li>';
        endwhile;
        echo $str; 

    }

答案 2 :(得分:0)

我找到了解决方案,问题是主机没有告诉我MySQL服务器升级。所以基本上我使用这些查询连接到数据库

mysql_query("SET NAMES 'utf8'",$dbhandle);

mysql_query("SET CHARSET 'utf8'",$dbhandle);

然后使用此功能代替之前的

mysql_set_charset("utf8", $dbhandle);

我解决了这个问题。