0

CakePHPを使用して、UTF-8でエンコードされた複数の文字列を含む配列を出力しています。出力用にレイアウトを設定しました(これはREST APIメソッドです)。

<?php.
  header("Pragma: no-cache");.
  header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");.
  header('Content-Type: application/json; charset=UTF-8');.
  header("X-JSON: ".$content_for_layout);.
  echo $content_for_layout;.
?>

これは私の見解です:

<?php echo json_encode($items); ?> 

データを取得するデータベーステーブルはutf-8でエンコードされています。ただし、要素の1つにà、áなどの特殊文字が含まれている場合にデータを出力すると、JSON配列で文字列がnullに設定されます。データを正しく出力するにはどうすればよいですか?

4

3 に答える 3

2

データベース接続が最も重要な部分であるutf-8に設定されていないようです。したがって、たとえば、'encoding' => 'utf8'のデータベース構成に追加します。app/config/database.php

    'default' => array(
        'driver'   => 'mysql',
        'host'     => 'YOURHOST',
        'login'    => 'YOURLOGIN',
        'password' => 'YOURPASS',
        'database' => 'YOURDB',
        'encoding' => 'utf8'
    ),

接続でエンコーディングを設定しない場合、「デフォルト」のエンコーディングが使用されます。デフォルトはutf8ではない可能性があります。

于 2012-09-19T16:24:31.640 に答える
1

これは、データがUTF-8でエンコードされていないことを意味している可能性があります。これは、データベース接続がUTF-8に設定されておらず、実際にPHP側でlatin1でデータを受信して​​いるためです。すべての落とし穴の概要については、WebアプリでのUnicodeの前面から背面への処理を参照してください。

于 2012-09-19T16:18:18.193 に答える
0
$items = json_encode( array_map( function($text){ return is_string($text) ? utf8_encode($text) : $text; }, $items) )
echo $items;
于 2012-09-19T16:12:44.087 に答える