以jQuery Ajax形式提交的坏字符集

时间:2011-07-08 09:26:10

标签: php javascript jquery ajax character-encoding

在我的索引PHP页面中,我定义了这个字符集:

header("Content-Type: text/html; charset=UTF-8");

以及带有meta标记的HTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在此页面上,我使用Ajax(jQuery)提交表单:

$('#action_button').click(function() {
        var azione = $('#form-post').attr('action');
        var datiform = $('#form-post').serialize();
        send = $.ajax({
            type: "POST",
            url: azione,
            data: datiform,
            dataType: "json",
            beforeSend: function(){
                 ...
            },
            success: function(msg){
                ...
            }
        });
        return false;
    });

在接收数据的页面中,我设置了标题

header("Content-Type: text/html; charset=UTF-8");

我要求发布数据:

$nome = htmlentities(rtrim(ltrim(strip_tags(addslashes($_POST['nome']))))) ;

但数据未在数据库中正确注册;人物òèìùàé被严格解释,如Ä和类似。我已经测试了不同的方法,但没有成功,但如果我发送没有Ajax(jQuery)的表单,它工作正常!

1 个答案:

答案 0 :(得分:2)

问题可能在您的数据库中。您可以echo $nome;确定。我建议您尝试使用此功能连接到数据库。同时将表格字符集转换为utf8_unicode_ci ...

function connect($server, $database, $username, $password, $charset = "UTF8"){
    $link = mysql_connect($server, $database, $password);
    if(!$link){
        die("Unable to connect to database server.");
    }
    mysql_selectdb($database);
    if(function_exists("mysql_set_charset")){
        mysql_set_charset($charset, $link);
    }else{
        mysql_query("SET NAMES $charset");   
    }
}

设置表字符集...

ALTER TABLE `my_table` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

数据库...

ALTER DATABASE `my_database` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci