Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何确保使用jquery$.post以UTF8格式提交变量_Php_Mysql_Character Encoding - Fatal编程技术网

Php 如何确保使用jquery$.post以UTF8格式提交变量

Php 如何确保使用jquery$.post以UTF8格式提交变量,php,mysql,character-encoding,Php,Mysql,Character Encoding,我已经为此挣扎了三天,这就是我所得到的,我无法理解为什么我会看到这种行为 我的问题是,我有一个MySql西班牙语数据库,其字符集和排序规则定义为utf8\u general\u ci。当我在delete.php中像这样查询数据库时“delete FROM countryNames WHERE country='$name'” 指定的行不会被删除。我在delete.php中通过post变量$name=$\u post['data']设置变量$name。主要是$name以西班牙语字符获取值,例如es

我已经为此挣扎了三天,这就是我所得到的,我无法理解为什么我会看到这种行为

我的问题是,我有一个MySql西班牙语数据库,其字符集和排序规则定义为utf8\u general\u ci。当我在delete.php中像这样查询数据库时
“delete FROM countryNames WHERE country='$name'”

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

您的答案可能在这里:

正如上面所说,使用
$.ajax
而不是
$.post
可以设置编码


或者,如第二个答案中所述,使用
$.ajaxSetup
相应地设置编码。

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

首先,要查看用于请求的字符集,请安装Firebug之类的软件,并检查请求/响应的“内容类型”标题。它看起来像“application/json;字符集=…'。在您的情况下,这应该是
charset=utf-8

我猜它之所以在发布表单时起作用,可能是因为非字母数字字符在客户端额外编码,然后在服务器上再次解码,这与直接发布数据不同

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


您可能还应该确保实际的HTML页面也作为UTF-8发送,而不是iso-8859-1。看看这篇文章,就如何把它做好做一个彻底的解释。

伙计们,这是Mac电脑的问题!!我刚刚在windows上测试了它作为我的服务器,现在一切正常。因此,当您使用Mac作为服务器,MySql使用UTF8作为字符集和排序规则时,请小心。我猜Mac用不同的编码存储文件夹和文件名,而不是UTF-8

对post变量执行
var_dump
,查看两种情况下得到的结果。@Neal的可能重复:在这两种情况下,它都表示string(37)或string(34)等。感谢您的回复…filename变量来自我硬盘上的一个文件夹,我通过php脚本读取该文件夹。文件夹名称是西班牙语文本中的国家名称。在Windows、Linux、Mac上?因为Windows上的NTFS使用UTF-16作为文件名,所以这可能已经是您的问题了…我在mac上..另外,如果在代码中让“文件名”等于español,而不是从磁盘读取它。它的工作原理是:S…因此,总之,文件名不在utf-8中!但是我在post调用前后检查了编码(mb_detect_encoding()),它给了我UTF-8:SHmm,我对Mac没有太多经验。。。但是他们应该使用类似于Linux的平台默认编码。您可以使用
iconv
强制UTF-8编码。