如何确保变量提交在UTF8使用jquery $.post


How to ensure variables submitted in UTF8 using jquery $.post

我已经为此挣扎了三天了,这就是我所得到的,我不明白为什么我看到这种行为。

我的问题是,我有一个MySql西班牙语数据库与字符集和排序定义为utf8_general_ci。当我像这样在delete.php中查询数据库时,"DELETE FROM countryNames WHERE country = '$name'"

指定的行不被删除。我通过一个post变量$name=$_post['data']在delete.php中设置变量$name。大多数$name获得西班牙语字符值,例如español, m xico等。delete.php文件从main.php调用。如果我从main.php $.post("delete.php", {data:filename});发送post消息,查询不删除条目(虽然'filename'字符串在utf8),但如果我创建一个表单,然后在main.php中发布我的数据变量,查询工作!!对我来说最大的问题是,为什么我必须提交一个表格的查询工作?我看到的是我的数据库拒绝值,如果它来自一个jquery post调用,但接受它,当它来自一个提交的表单。(我不做代码更改查询工作。只需通过提交表单提交值)

首先,要查看请求使用的字符集ìs,安装类似Firebug的东西并检查请求/响应的'Content-Type'标头。它看起来像'application/json;charset =…"。在您的例子中应该是charset=utf-8

我猜它在发布表单时工作的原因可能是因为x-www-form-urlencoded -非字母数字字符在客户端被额外编码,然后在服务器上再次解码,这就是直接发布数据的区别。

这意味着某个地方有错误的编码在工作。默认情况下,PHP将字符串与它的编码无关,因此我倾向于排除它作为错误来源的可能性。jQuery.post也默认使用UTF-8…所以我怀疑是filename变量。你确定是UTF-8格式吗?在哪里以及如何找回它?

您可能还应该确保实际的HTML页面也以UTF-8发送,而不是iso-8859-1。请阅读本文,了解如何正确使用它。

伙计们,这是Mac的问题!!我刚刚在Windows服务器上测试了一下,现在一切正常。所以当你使用Mac作为服务器,MySql使用UTF8作为字符集和排序时要小心。我猜Mac用不同的编码存储文件夹和文件名,而不是UTF-8。

你的答案可能在这里:如何设置编码在。getjson JQuery

如上面所说,使用$.ajax代替$.post,你可以设置编码。

OR,正如它在第二个答案中所说,使用$.ajaxSetup来设置相应的编码

使用.serialize() !我想它会起作用的。更多信息:http://api.jquery.com/serialize/