我正在使用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编码。但是当我输出数据时,如果其中一个元素具有à,á等特殊字符,则该字符串将在JSON数组中设置为null。如何正确输出数据?
答案 0 :(得分:2)
看起来您的数据库连接未设置为utf-8,这是最重要的部分。因此,将'encoding' => 'utf8'
添加到app/config/database.php
中的数据库配置中,例如:
'default' => array(
'driver' => 'mysql',
'host' => 'YOURHOST',
'login' => 'YOURLOGIN',
'password' => 'YOURPASS',
'database' => 'YOURDB',
'encoding' => 'utf8'
),
如果未在连接中设置编码,则将使用“默认”编码。默认值可能不是utf8。
答案 1 :(得分:1)
这很可能意味着您的数据不是以UTF-8编码,很可能是因为数据库连接未设置为UTF-8且您实际上正在接收PHP端的latin1中的数据。有关所有陷阱的详细信息,请参阅Handling Unicode Front To Back In A Web App。
答案 2 :(得分:0)
$items = json_encode( array_map( function($text){ return is_string($text) ? utf8_encode($text) : $text; }, $items) )
echo $items;