0

我需要Content-Type: application/json; charset=UTF-8在 CakePHP 的数据视图中进行设置。我已经尝试设置$this->response->header('Content-Type', 'application/json; charset=UTF-8');,但这并没有改变任何东西。它仍然只是输出Content-Type: application/json

4

6 回答 6

1

它在代码中(CakeResponse,第 447 行):

if (strpos($this->_contentType, 'text/') === 0) {
    $this->header('Content-Type', "{$this->_contentType}; charset={$this->_charset}");
} else {
    $this->header('Content-Type', "{$this->_contentType}");
}

所以只有“text/...”才会附加字符集。我不知道为什么,虽然...

于 2012-11-16T22:36:44.487 回答
0

有趣的是,我昨晚也遇到了同样的问题。似乎 UTF-8 是默认的 JSON 编码,这可能是 Cake 不发送标头的原因(但我无法找到对这个决定的引用)。

我的解决方案是使用 php——json_decode()它应该正确解码字符串。我有很多法语口音显示为 java/C unicode,例如\u00E9,我认为这是一个标题问题。但是在通过json_decode()重音字符运行字符串后,所有显示都正确。

Marks 的评论链接也有很好的信息。

于 2012-11-17T04:37:38.537 回答
0

为此,您可以将其放在控制器/功能中:

json_encode($updown_rs);

并在视图文件(views/check_json)中:

var json_object = $.parseJSON(response);   
于 2012-11-21T12:57:59.370 回答
0

application/json 没有字符集参数。试图设置一个是没有意义的。请参阅http://rfc7159.net/rfc7159#ianacons

于 2014-03-21T13:33:22.177 回答
0

我正在使用 cake 2.10.11 并且只是在 json 布局中使用了这段代码:

$this->response->charset('utf-8');
于 2018-10-15T15:35:38.803 回答
0

您可以$this->RequestHandler->ext = 'json';在 beforefilter 方法中使用

查看以下示例

public function beforeFilter(){
    parent::beforeFilter();
    $this->RequestHandler->ext = 'json';
}

public function index()
{
    $this->autoRender = false;
    $output = array(
      array('value' =>'first value'),
      array('value' =>'second value'),
    );
    $json = json_encode($output);
    $this->response->body($json);
}
于 2020-07-08T16:06:22.557 回答