我需要在CakePHP的数据视图中设置Content-Type: application/json; charset=UTF-8
。我已经尝试设置$this->response->header('Content-Type', 'application/json; charset=UTF-8');
但这并没有改变任何东西。它仍然只输出Content-Type: application/json
。
答案 0 :(得分: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 / ...”才会附加charset。 我不知道为什么,但是......
答案 1 :(得分:0)
好笑,我昨晚也有同样的问题。似乎UTF-8是默认的JSON编码,这可能是Cake不发送标头的原因(但无论如何我无法找到对此决定的引用)。
我的解决方案是使用php的json_decode()
- 它应该正确解码字符串。我有很多法语口音显示为java / C unicode,例如\u00E9
并认为这是一个标题问题。但是在通过json_decode()
运行字符串后,重音字符都正确显示。
Marks'链接评论也有很好的信息。
答案 2 :(得分:0)
为此你可以把它放在控制器/功能中:
json_encode($updown_rs);
并在视图文件(views / check_json)中:
var json_object = $.parseJSON(response);
答案 3 :(得分:0)
application / json没有charset参数。尝试设置一个没有意义。请参阅http://rfc7159.net/rfc7159#ianacons。
答案 4 :(得分:0)
我使用的是Cake 2.10.11,只是在json布局中使用了以下代码:
$this->response->charset('utf-8');
答案 5 :(得分:0)
您可以通过在beforefilter方法中使用$this->RequestHandler->ext = 'json';
来实现
查看以下示例
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);
}