在PHP上正确解码双编码的UTF-8

时间:2013-02-16 22:35:52

标签: php javascript jquery ajax encoding

所以我试图通过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正确解码数据的方法,即使它是双重编码的,甚至是三重编码的。

1 个答案:

答案 0 :(得分:2)

这不是双重编码,它是正确的UTF-8。看起来PHP正在期待latin-1编码,而且如果它们不是,它会显示相同的字节意味着什么 UTF-8。

在这种情况下,由于您的字符似乎低于0xFF,如果您无法弄清楚如何让PHP识别UTF-8,您也可以在latin-1中将它们首先进行URL编码为Jo%E3o。