0

所以我试图通过 Ajax 将数据从 HTML 页面发送到 PHP 页面。

这就是我使用的 jQuery 代码:

$.ajax({
    url: "test.php",
    type: "POST",
    data: {
        name: "João"
    }
}).done(function (data) {
    alert(data);
})

如您所见,我发送的参数是“João”。在发出 Ajax 请求之前,jQuery 在后台对其进行编码,“João”变为“Jo%C3%A3o”,它是双重编码的 UTF-8。

当请求被发送并且 PHP 尝试在后台对其进行解码时,我的问题就出现了。当我使用 $_POST 时,PHP 只会自动解码一次,所以我得到的是“João”,而不是“João”。发生这种情况是因为 PHP 正在单独解码每个 % ,因此%C3变为Ã并且%A3变为£

如果我尝试通过 utf8_decode() 手动对其进行解码,它将起作用,但我在这里知道是否有更好的解决方案。我真正需要的是一种让 PHP 正确解码我的数据的方法,即使它是双重编码的,甚至是三重编码的。

4

1 回答 1

2

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

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

于 2013-02-16T23:04:49.233 回答