首先,我的数据库编码是utf-8。
我必须通过Fußball
方法将字符串index.php
发送到POST
。当我使用带有action="index.php"
的HTML表单发送它时,它会以Fu%DFball
发送并正确地返回它我在php文件上使用htmlentities()
。它很棒。当我尝试使用jQuery / AJAX发送它时,问题就出现了。
$("#Form").submit(function() {
$.ajax({
type: "POST",
dataType : "text",
url: "index.php", //Does the validation
data: $("#Form").serialize(),
success: function(data) {
alert(data)
},
});
return false;
});
它以Fu%C3%9Fball
的形式发送并以FuÃ
的形式返回,我尝试了一切来解码或以不同的方式发送。以下是各种场景中返回的内容:
在php文件中使用htmlentities()
正常发送:
FuÃ
在php文件中正常发送,没有htmlentities()
或htmlspecialchars()
Fußball
正常发送,php文件上有utf8_decode()
Fu
在发送字符串之前在jQuery脚本上使用escape()
,encodeURIComponent()
或contentType: "utf-8"
会使表单以.php
文件无法理解的方式提交,但不仅如此,它仍然将字符串发送为Fu%C3%9Fball
。
我还为每个文件类型使用了正确的命令来将我的所有文档编码为utf-8
,这没有任何区别所以我认为它始终都是utf-8
。
答案 0 :(得分:1)
确保您的网站页面的编码也是UTF-8。
如果默认情况下是ISO-8859-1,它会像您所经历的那样错误地解析UTF-8字符。
要查看,请在打开页面时查看浏览器的“编码”菜单:这是关于使用什么编码的最后一个词。
可能是您的服务器配置为输出HTML文件的ISO-8859-1内容类型标头。有关如何解决此问题,请参阅How to change the default encoding to UTF-8 for Apache?。