我使用这个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函数