Ajax Json 响应在 PHP 中出现非英语 URL 或文本的问题,这对程序员来说是真正的挑战


Issues with Ajax Json response for non-english URL or text in PHP, real Challenge for programmers?

我有以下Jquery编码,

$.ajax({
          url: "dataAdd.php",
          type: "POST",
          data: data,
          contentType: "application/x-www-form-urlencoded; charset=UTF-8",
          cache: false,
          dataType: "json",
          success: function(data) {
          $("#result").html(data["result"]);
          },
          error : function(jqXHR, textStatus, errorThrown) {
                alert('Error: ' + jqXHR.status);
            }, 
 });

并具有以下PHP编码,

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1996 00:00:00 GMT');
header('Content-type: application/json; charset=UTF-8');
session_start();
if(isset($_SESSION['username']))
{
$sess_tab = trim($_SESSION['username']);
}
$data = // Some result stuff //;
$data = array("result"=>$ress);
echo json_encode($data);

此编码完美地以英语(文本或URL)发回所有数据。但是当涉及到处理中文,日语或其他外语维基百科URL时,结果是:

这个结果是在萤火虫上观察到的,{结果:空}

但是对于几乎没有外文的英文文本,我们得到以下正确响应,

{"result":"<table><tr><td align='"center'"><div id='"btn_mypage'"><a href='"http:'/'/www.fran.com'" target='"_blank'">Fran'u00e7aise Fran'u00e7ais<'/a><'/div><'/td><td align='"center'"><div id='"btn_mypage'"><a href='"http:'/'/ru.wikipedia.org'/wiki'/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%‌​BD%D0%B0%D1%8F_%D1%81'" target='"_blank'">Portada<'/a><'/div><'/td><td align='"center'"><'/td><td align='"center'"><'/td><'/tr><'/table>"}

注意:我们的内容类型是内容类型:"application/x-www-form-urlencoded;charset=UTF-8",正如 Jquery 文档所指定的那样。

我们在代码中设置了数据类型、标头和 UTF-8。ajax json 请求总是对所有数据成功,但响应很糟糕。有人遇到过类似的情况,有什么建议吗?

如果在查询中发现任何错误,请自由编辑它。

有没有人知道我们如何修改下面的编码以接受或接收 ajax json 响应中的所有语言?这在另一个堆栈溢出问题中找到。

<?php
header("Content-type: text/csv; charset=GB2312");
$arr = array('丂','亐');
echo json_encode($arr);
?>

这个问题似乎需要专家jquery ajax程序员。我们应该将问题状态移动到Jquery Ajax团队吗?

哇,

我找到了解决方案。

只需在发送回 ajax-json 响应之前使用 PHP 函数mb_convert_encoding。我感谢大家抽出时间分析这个问题。

发送回 JSON 响应时的 PHP 编码:

<?php 
// Add this line as we are sending back html with non-english response before the last two lines.
$ress =$info = mb_convert_encoding($ress, "HTML-ENTITIES", "UTF-8");
            
$data = array("result"=>$ress);
echo json_encode($data);
?>