我有一些JavaScript,可通过POST格式以JSON格式将数据发送到PHP脚本。

一切都可以使用“常规”字符正常运行,但是在使用带有重音(例如“à”)的元音时,我会发现不一致之处。我想问是否有人对如何解决这个问题有建议。

这是Javascript:

$.ajax({
        contentType: 'application/json',
        data: JSON.stringify({
            "action": params.action,
            "username": params.username,
            "page": params.page,
        }),
        processData: false,
        //dataType: 'json',
        url: "/w/ImolaCustom/SudoAutoedit.php",
        type: 'POST',
        success: function(data) {
            ...
        }
    });


在PHP方面,我这样做:

$theData = json_decode(file_get_contents('php://input')), true);


如果我发送类似以下内容,则表示问题本身:

params.page = "Società sportiva Bridge";


$ theData ['page']变为“ Societ \ xc3 \ xa0 sportiva Bridge”

如果我使用utf8_decode($ theData ['page'])(或者如果在json_decoding之前在php:// input传递的字符串上使用它,则会得到“ Societ \ xe0 sportiva Bridge”。

我尝试了不同的转换函数,例如iconv(),mb_convert_variables()和mb_convert_encoding(),从UTF-8转换为ISO-8859-1,其结果与上述相同。

我也尝试使用encodeURIComponent()或escape()对客户端字符串进行编码。 PHP接收正确的字符串(分别为“ Societ%C3%A0%20sportiva%20Bridge”和“ Societ%E0%20sportiva%20Bridge”),但是在用rawurldecode()对其进行解码后,我仍然得到“ Societ \ xc3 \ xa0 sportiva Bridge”和“ Societ \ xe0 sportiva Bridge”。

这两个文件都在CentOS机器上,并以UNIX模式下的EOL Conversion和Charset Encoding设置为UTF-8(编辑器为notepad ++)保存。

最佳答案

请尝试以下方法:

$content = file_get_contents('php://input');
$content = mb_convert_encoding($content, 'UTF-8',
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));

$theData = json_decode($content, true);


要么:

$content = file_get_contents('php://input');
$content = html_entity_decode(mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8"));

$theData = json_decode($content, true);


我希望这能帮到您。

09-08 08:17