Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON在CakePHP中设置内容类型头_Php_Http_Cakephp_Header - Fatal编程技术网

使用JSON在CakePHP中设置内容类型头

使用JSON在CakePHP中设置内容类型头,php,http,cakephp,header,Php,Http,Cakephp,Header,我需要设置内容类型:application/json;在CakePHP的数据视图中,charset=UTF-8。我已经尝试设置$this->response->header('Content-Type','application/json;charset=UTF-8')但这不会改变任何事情。它仍然只是在代码中输出内容类型:application/json(CakeResponse,第447行): 因此,仅对“text/…”追加字符集。 我不知道为什么…有趣的是,我昨天晚上也有同样的问题。UTF-

我需要设置
内容类型:application/json;在CakePHP的数据视图中,charset=UTF-8
。我已经尝试设置
$this->response->header('Content-Type','application/json;charset=UTF-8')但这不会改变任何事情。它仍然只是在代码中输出
内容类型:application/json

(CakeResponse,第447行):

因此,仅对“text/…”追加字符集。
我不知道为什么…

有趣的是,我昨天晚上也有同样的问题。UTF-8似乎是默认的JSON编码,这可能就是为什么不是通过Cake发送头的原因(但我也找不到这一决定的参考)

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


标记链接注释也有很好的信息。

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

json_encode($updown_rs);
在视图文件(views/check_json)中:


application/json没有字符集参数。试着设置一个是没有意义的。请参阅。

我正在使用cake 2.10.11,并在json布局中使用了以下代码:

$this->response->charset('utf-8');

您可以使用
$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);
}

您的应用程序是否在utf8上?通过core.php?默认情况下,它应该这样做。是的,它被设置为
“App.encoding”,“UTF-8”
。我刚刚发现每个普通视图都会发送标题。JSON视图是唯一一个未发送正确标题的视图。为什么您要在视图中设置它,而不是在控制器中设置它?抱歉,我不理解您的问题。我没有在视图中设置标题。默认情况下,除了JSON视图之外,每个普通视图都会设置标题。为什么要寻找解决方法?谷歌搜索并发现其他类型也有一个附加字符集的“权利”,并将其作为cakephp的官方错误——或者意识到cakephp实际上根据HTTP规范正确设置了头。这两者都是可能的。PS:我的谷歌搜索揭示了:=>json的“冗余”。关于其他类型我不知道。为了澄清:“内容类型:application/json;charset=UTF-8”已经添加到核心中,作为当前主分支中的修复程序:-该问题在2012年正式解决。
$this->response->charset('utf-8');
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);
}