4

我对通过 ajax 加载的 json 编码信息有疑问。

PHP代码(test.php):

<?php
  $val1 = 'Productmanager m / f';
  $val2 = 'test';
  $arr = array('first' => $val1, 'second' => $val2);
  echo json_encode($arr);
?>

html 文件中的 JavaScript 代码:

$(document).ready(function() {
  $.post("test.php", function(data){
    var response = $.parseJSON(data);
    console.log(response.first);
    console.log(response.second);
  }
});

控制台中的结果如下所示:

Productmanager&#x20;m&#x20;&#x2f;&#x20;f

test

这两个文件都是 UTF-8 编码的。

我真的不知道为什么以及如何将其转换回可读字符串。您可能知道这是怎么发生的?

一开始我没有找到合适的解决方案,只是搜索和替换方法。

4

3 回答 3

3

添加正确的 PHP 标头并解码字符串:

<?php
  header("Content-type: application/json");
  $val1 = "Productmanager m / f";
  $val2 = "test";
  $arr = array("first" => $val1, "second" => $val2);
  echo json_encode($arr);
?>

<script>

    $(document).ready(function() {
      $.post("test.php", function(data){
        var response = $.parseJSON(data);
        console.log(htmlDecode(response.first));
        console.log(response.second);
      }
    });

function htmlEncode(value){
  return $('<div/>').text(value).html();
}

function htmlDecode(value){
  return $('<div/>').html(value).text();
}

</script>
于 2012-04-22T15:14:59.160 回答
0

你能试试这个吗?

$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "test.php",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        dataType: 'json',
        success: function(data) {
            var response = $.parseJSON(data);
                console.log(response.first);
                console.log(response.second);
        }
    });
});

您可以使用“contentType”为 ajax 请求设置字符编码

在您的 php 方面,您的代码必须是这样的;

<?php
  $val1 = 'Productmanager m / f';
  $val2 = 'test';
  $arr = array('first' => $val1, 'second' => $val2);
  echo json_encode($arr, JSON_UNESCAPED_UNICODE);
?>

重要提示:JSON_UNESCAPED_UNICODE 适用于 php 5.4.0!!

于 2012-04-22T15:04:30.247 回答
0

你可以试试这个test.php

<?php
  $val1 = 'Productmanager m / f';
  $val2 = 'test';
  $arr = array('first' => $val1, 'second' => $val2);
  echo json_encode($arr, JSON_UNESCAPED_UNICODE);
?>
于 2012-04-22T15:10:33.333 回答