jQuery ajax特殊字符问题

时间:2011-09-20 12:21:02

标签: php mysql jquery character-encoding special-characters

好的,这就是问题:

我的php页面上有一个表单。当用户输入名称按下提交时,jQuery点击事件(在提交按钮上)收集信息并通过$ .ajax()传递它们。

$.ajax({
    url: "ajax/addGatheringSignup.php",
    type: "POST",
    async: true,
    dataType: 'json',
    data: {
        "id":           $_GET['id'],
        "name":         $signupNameInput.val()
    },
    success: function(jsonData){
        if(jsonData[0].feedback == "ok"){
            $signupForm = $('#singupform');
            $signupForm.html('Signup successful!');
        }else{
            Alert(jsonData[0].feedback);
        }
    },
    error: function(){
        Alert("error alert");
    }
});

如您所见,“name”字段是名称inputfield的值。但是当我将它提交到我的php页面(我没有在文本中格式化任何内容)时,它在我的MySql数据库中完全是垃圾。目前我试图让丹麦字母æ,ø和å工作。

我知道我的mysql数据库正在使用UTF-8,我的index.php的元头看起来像这样(每个页面都是从index.php页面生成的... ex index.php?page = random) :

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

但是没有用。当我发布:“æÆ-øØ-åÅ”到数据库时,它保存为:“Ã|Ã-Ã-øÃ〜-Ã¥Ã...”。 有谁知道我要做什么?

编辑1:

我可以看到,在一个成功的ajax提交html我设置$ signupForm(上面的代码中的第13行)也显示错误(通常是一些丹麦语,我写的丹麦字符提到)

编辑2(找到一个解决方案):

我发现了一种方法。 $ .ajax()根据jQuery doc,始终将数据解析为UTF8。我不知道为什么这搞砸了我的代码,但是当我将* utf8_decode($ name)*添加到add-function时它解析正确(所以我猜我的charset必须设置为ISO-8859-1以某种方式隐藏? )。这使得它变得更容易,因为我可以再次打开旧的charset ISO-8859-1并删除我的所有utf8_encode()函数。

我的最后一个问题是“编辑1”中出现的问题。在这里,我找到了一个如何转换UTF8字符串的解决方案(再次因为$ .ajax()):

function decode_utf8( s ){
    return decodeURIComponent( escape( s ) );
}

4 个答案:

答案 0 :(得分:2)

问题可能出在您的数据库连接中。它也在给定的字符集中进行通信。

请参阅mysql_set_charset()

答案 1 :(得分:2)

Ajax-POST中的数据是UTF8编码的,因此在PHP脚本(写入数据库的地方)中,您需要执行以下操作:

$name = utf8_decode($_POST['name']);

这样您就可以将æÆ-øØ-åÅ存储为æÆ-øØ-åÅ而不是ASCII格式æÆ-øØ-åÅ 您的数据库也需要进行适当的整理(例如latin1_swedish_ci

答案 2 :(得分:0)

我不确定,但听起来你会得到混合编码类型。

以UTF-8格式发送但输入转换为ISO-8859-1并存储在mysql UTF-8编码表中的页面将失败。

您需要控制输入生态类型与您选择在php和外部使用的内部编码类型相关。

试着看看这对你有帮助。

  1. PHP messing with HTML Charset Encoding
  2. http://www.tanzilo.com/2008/12/29/php-mysql-creating-a-website-in-your-local-language-smoothly/

答案 3 :(得分:-1)

function decode_utf8( s ){
    return decodeURIComponent( escape( s ) );
}

太神奇了 一个好的简短形式是

    Name = decodeURIComponent( escape( Name ) );

它将解决ajax响应中的'ISO 8859-1字符'问题。