2013-03-16 141 views
0

首先,我的数据库编码是utf-8。jQuery/AJAX/php编码噩梦

我必须通过POST方法发送字符串Fußballindex.php。当我使用一个带有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à 

正常发送,而不htmlentities()htmlspecialchars()在php文件

Fußball 

发送通常与utf8_decode()上的php文件

Fu 

发送字符串之前使用escape(),对jQuery脚本encodeURIComponent()contentType: "utf-8"使得在某种程度上.php文件无法理解提交的形式,但不仅如此,它仍然将字符串作为Fu%C3%9Fball

我还使用了适当的命令为每个文件类型编码我所有的文件为utf-8,这没有任何区别,所以我认为它是所有utf-8开始。

+0

首先,摆脱所有'htmlentities()'调用 - 这需要固定在根,创建实体将不是必要的。你的*页面*编码是什么?看起来它可能不是UTF-8。你能使它成为UTF-8吗? – 2013-03-16 12:25:43

+0

也应该是utf-8。我添加了'mb_internal_encoding(“UTF-8”);'当进行测试时,看看这是否是问题,并没有什么区别。 – Alex 2013-03-16 12:32:08

+2

打开页面时,请查看浏览器的“编码”菜单。这是关于使用什么编码的最后一句话 – 2013-03-16 12:32:50

回答

1

确保您的网页页面的编码也是UTF-8。

默认情况下,如果它是ISO-8859-1,它将错误地解析UTF-8字符,正如您所体验的那样。

要打开页面,请查看浏览器的“编码”菜单:这是使用什么编码的最后一个字。

可能是您的服务器配置为输出HTML文件的ISO-8859-1内容类型标头。有关如何解决该问题,请参阅How to change the default encoding to UTF-8 for Apache?