我已经为此苦苦挣扎了三天,这就是我所得到的,而且我不明白为什么我会看到这种行为。
我的问题是我有一个MySql西类牙数据库,其字符集和排序规则定义为utf8_general_ci。当我在delete.php中查询像这样的"DELETE FROM countryNames WHERE country = '$name'"
的数据库时
指定的行不会被删除。我正在通过post变量$name=$_post['data']
在delete.php中设置变量$ name。 $ name大多以西类牙语字符(例如,西类牙文,墨西哥等)获取值。delete.php文件从main.php中调用。如果我从main.php $.post("delete.php", {data:filename});
发送发布消息,则查询不会删除该条目(尽管'filename '字符串在utf8中),但是如果我创建一个表单,然后将数据变量发布到main.php中,则该查询有效!对我来说,最大的问题是为什么我必须提交表格才能使查询工作?我所看到的是,如果数据库来自jquery post调用,则该数据库拒绝该值,但是当它来自提交的表单时,则接受该值。 (我不更改代码以使查询正常工作。只需通过提交表单来发布值)
最佳答案
首先,要查看用于请求的字符集,请安装Firebug之类的东西,然后检查请求/响应的“Content-Type” header 。看起来像'application/json; charset = ...'。在您的情况下,该名称应为charset=utf-8
。
我的猜测为什么在发布表单时起作用,可能是因为x-www-form-urlencoded-非字母数字字符在客户端另外进行了编码,然后又在服务器上再次解码,这与直接发布数据不同。
这意味着在某处存在错误的编码。 PHP默认情况下会将与您的字符串无关的字符串视为编码,因此我倾向于将其排除为错误的根源。 jQuery.post
默认情况下也使用UTF-8 ...所以我怀疑是filename
变量。您确定它在UTF-8中吗?您在哪里以及如何检索它?
您可能还应该确保实际的HTML页面也以UTF-8的形式发送,而不是以iso-8859-1的形式发送。查看此article,以获取有关如何正确设置的完整说明。
关于php - 如何确保使用jquery $ .post以UTF8提交的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7177463/