Jquery $ .ajax特殊字符问题

时间:2012-01-09 06:46:33

标签: php jquery ajax

我正在使用这个jquery .ajax函数来保存表单上的注释:

var request = $.ajax({
        data: {"yourname": yourname,
             "yourmessage": yourmessage},
        type: "POST",
        url: "xxx.php",
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function(data){...}
        }
    });

以下是名为:

的PHP页面
$yourname = trim(mysql_real_escape_string($_POST['yourname']));
$yourmessage = trim(mysql_real_escape_string($_POST['yourmessage']));

mysql_query("INSERT INTO `reactions` VALUES ('".$yourname."','".$yourmessage."')");

特殊字符未正确注册,因此我得到了这个结果:

“C \'estÃçaquetureéfères?”而不是“C'estàçadequetuéfères?”

为了正确地将特殊字符(和换行符)保存到SQL,我必须更改什么?

3 个答案:

答案 0 :(得分:3)

看起来您可能需要使用utf8_decode,可能是这样的:

$yourname = utf8_decode(trim(mysql_real_escape_string($_POST['yourname'])));
$yourmessage = utf8_decode(trim(mysql_real_escape_string($_POST['yourmessage'])));

旁注:直接字符串连接只是要求SQL注入攻击。如果要在任何类型的生产环境中,请查看mysql_real_escape_string

答案 1 :(得分:1)

它与JQuery或PHP无关。它可能与您处理请求和插入数据有关。

确保涵盖以下所有理由:

  • 确保mysql中的所有表列都是UTF8
  • 将此添加到您的mysql宏或创建mysql连接后立即:mysql_query("SET NAMES utf8");mysql --default-character-set=utf8 -uyour_user -p
  • 将其添加到所有php页面的顶部(如果有的话,则为master):Header("Content-Type: text/html; charset=UTF-8");
  • 当然是元标记,它在html /模板文件中设置编码。

答案 2 :(得分:0)

probabaly它关于你不使用UTF-8。如果你的代码以UTF-8开头,你就不会得到这样的错误。不要忘记基于UTF-8发送的所有ajax请求

其他方式可以使用mb_convert_encoding函数或iconv函数

转换文本