0

Content-Type: application/json; charset=UTF-8CakePHP からデータ ビューを設定する必要があります。すでに設定しようとしまし$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

このために、これをコントローラー/関数に配置できます。

json_encode($updown_rs);

およびビューファイル(views / check_json):

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

面白いことに、昨夜も同じ問題がありました。UTF-8 がデフォルトの JSON エンコーディングであるように思われ、それがおそらく Cake によってヘッダーが送信されない理由です (しかし、どちらの方法でもこの決定への参照を見つけることができませんでした)。

私にとっての解決策は、phpを使用することでしたjson_decode()-文字列を適切にデコードする必要があります。たとえば、Java/C ユニコードとして表示されるフランス語のアクセントがたくさんあり\u00E9、ヘッダーの問題だと思いました。しかし、アクセント付きの文字を文字列に通しjson_decode()た後、すべて正しく表示されました。

マークスのコメントへのリンクにも良い情報があります。

于 2012-11-17T04:37:38.537 に答える
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 に答える