Jquery$.ajax特殊字符问题


Jquery $.ajax special characters issue

我使用这个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àça que tu ré©fères

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

看起来您可能需要使用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_sescape_string。

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

确保你涵盖了以下所有理由:

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

很可能是因为你不使用UTF-8。如果你的代码以UTF-8开头,你就不会出现这样的错误。不要忘记所有基于UTF-8 的ajax请求发送

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

转换文本