Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP上正确解码双编码UTF-8_Php_Javascript_Jquery_Ajax_Encoding - Fatal编程技术网

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

在PHP上正确解码双编码UTF-8,php,javascript,jquery,ajax,encoding,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

因此,我试图通过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试图在后台对其进行解码时,我的问题就出现了PHP在我使用$u POST时只会自动解码一次,所以我没有得到“João”,而是得到了“JoÃo”。这是因为PHP每%单独解码一次,所以%C3变成%A3变成


如果我尝试通过utf8_decode()手动解码,它会工作,但我想知道是否有更好的解决方案。我真正需要的是PHP能够正确解码我的数据,即使它是双重编码,甚至是三重编码。

这不是双重编码,而是正确的UTF-8。看起来PHP希望使用拉丁-1编码,并向您展示了如果不使用相同的字节,它们将意味着什么 UTF-8


在本例中,由于您的字符似乎低于0xFF,如果您无法确定如何让PHP识别UTF-8,您也可以先将其URL编码为拉丁语-1中的Jo%E3o。

这不是“双重编码”。。。这就是UTF-8的编码方式。如果您希望用一个字节表示
ã
,则需要在发送数据之前指定支持的字符集。请记住,您不必重新发布问题,因为您可以编辑和改进问题。但是,由于另一个问题还没有接近一个问题,而且你已经发布了一个新的问题,你至少可以删除另一个问题。在主题上,我从来没有遇到过这个问题。你把页面的字符集设置为UTF-8了吗?莱肯斯廷我明白了。我的问题是,在使用POST类型时,在发送Ajax数据之前不能更改字符集。它将始终作为UTF-8发送。所以在本例中,我需要一种在PHP上完全解码UTF-8数据的方法。我使用UTF-8编码编写了“João”,然后将其转换为ANSI,结果与“JoÃo”完全相同。看起来PHP试图将我的UTF-8数据解码为ANSI,而不是UTF-8本身。下面是发生的情况:1-数据以UTF-8编码发送到PHP 2-PHP接收数据并尝试以错误编码(ANSI)对其进行解码。数据必须以UTF-8的形式发送,因此我需要更正PHP部分。您还可以尝试使用php函数utf8\u decode。