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

时间:2011-08-24 14:47:26

标签: php mysql character-encoding

我一直在为此奋斗三天,这就是我所拥有的,我无法理解为什么我会看到这种行为。

我的问题是我有一个MySql spanish db,char set和collat​​ion定义为utf8_general_ci。当我在delete.php中查询数据库时,如"DELETE FROM countryNames WHERE country = '$name'"

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

4 个答案:

答案 0 :(得分:2)

首先,要查看charset用于请求的内容,请安装类似Firebug的内容并检查请求/响应的“Content-Type”标头。它看起来像'application / json;字符集= ...“。在你的情况下,这应该是charset=utf-8

我猜测发布表单的原因可能是因为x-www-form-urlencoded - 非字母数字字符在客户端另外编码并再次在服务器上解码,这与直接发布数据有所不同。 / p>

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

您可能还应该确保实际的HTML页面也以UTF-8的形式发送,而不是iso-8859-1。请查看此article,详细了解如何使其正确。

答案 1 :(得分:1)

伙计这是一个Mac问题!!我刚刚在Windows上测试它作为我的服务器,现在一切正常。所以当你使用Mac作为服务器时,请使用具有UTF8作为charset和collat​​ion的MySql。我想Mac会以一些不同的编码存储文件夹和文件名,而不是UTF-8。

答案 2 :(得分:0)

你的回答可能在这里:How to set encoding in .getJSON JQuery

正如它所说,使用$.ajax代替$.post,您可以设置编码。

或者,正如它在第二个回答中所说,使用$.ajaxSetup来相应地设置编码。

答案 3 :(得分:0)

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