我有一些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);
我希望这能帮到您。