jQuery/AJAX/php编码噩梦
问题描述:
首先,我的数据库编码是utf-8。jQuery/AJAX/php编码噩梦
我必须通过POST
方法发送字符串Fußball
到index.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
开始。
答
确保您的网页页面的编码也是UTF-8。
默认情况下,如果它是ISO-8859-1,它将错误地解析UTF-8字符,正如您所体验的那样。
要打开页面,请查看浏览器的“编码”菜单:这是使用什么编码的最后一个字。
可能是您的服务器配置为输出HTML文件的ISO-8859-1内容类型标头。有关如何解决该问题,请参阅How to change the default encoding to UTF-8 for Apache?。
首先,摆脱所有'htmlentities()'调用 - 这需要固定在根,创建实体将不是必要的。你的*页面*编码是什么?看起来它可能不是UTF-8。你能使它成为UTF-8吗? – 2013-03-16 12:25:43
也应该是utf-8。我添加了'mb_internal_encoding(“UTF-8”);'当进行测试时,看看这是否是问题,并没有什么区别。 – Alex 2013-03-16 12:32:08
打开页面时,请查看浏览器的“编码”菜单。这是关于使用什么编码的最后一句话 – 2013-03-16 12:32:50