所以我试图通过Ajax将数据从HTML页面发送到PHP页面。
这是我使用的jQuery代码:
$.ajax({
url: "test.php",
type: "POST",
data: {
name: "João"
}
}).done(function (data) {
alert(data);
})
如您所见,参数im sending是“João”。在进行Ajax请求之前,jQuery在后台对其进行编码,“João”变为“Jo%C3%A3o”,它是双重编码的UTF-8。
当发送请求并且PHP尝试在后台解码时,我的问题就出现了。 当我使用$ _POST时,PHP只会自动解码一次,因此我没有得到“João”而是“João”。这是因为PHP正在单独解码每个%,所以%C3 变为Ã,%A3 变为£。
如果我尝试通过utf8_decode()手动解码它,它会工作,但我在这里知道是否有更好的解决方案。我真正需要的是一种PHP正确解码数据的方法,即使它是双重编码的,甚至是三重编码的。
答案 0 :(得分:2)
这不是双重编码,它是正确的UTF-8。看起来PHP正在期待latin-1编码,而且如果它们不是,它会显示相同的字节意味着什么 UTF-8。
在这种情况下,由于您的字符似乎低于0xFF,如果您无法弄清楚如何让PHP识别UTF-8,您也可以在latin-1中将它们首先进行URL编码为Jo%E3o。