私はPHP & JSONに新しく、チュートリアルに基づいて、mysql dbのテーブルの内容を返す簡単なWebサービスを作成しました。utf-8文字(ギリシャ語)のphp-json出力Webサービスの問題
出力はXMLとJSONの両方であり、データベースcaracterセットはUTF-8です。私の問題は、いくつかのフィールドにはギリシャ文字が含まれていて、JSON出力形式で正しく表示されないということです(XMLではすべて問題ありません)。どんな考えが間違っているかもしれませんか?
PHPファイルは以下の通りです:
<?php
/* require the place_name_en as the parameter */
/* soak in the passed variable or set our own */
$number_of_places = isset($_GET['num']) ? intval($_GET['num']) : 1; //10 is the default
$format = strtolower($_GET['format']) == 'json' ? 'json' : 'xml'; //xml is the default
/* connect to the db */
$link = mysql_connect('xxx','xxx','xxx') or die('Cannot connect to the DB');
mysql_select_db('foodbar',$link) or die('Cannot select the DB');
mysql_set_charset('utf8',$link);
mysql_query('set names utf8');
/* grab the posts from the db */
$query = 'SELECT * FROM test';
$result = mysql_query($query,$link) or die('Errant query: '.$query);
/* create one master array of the records */
$posts = array();
if(mysql_num_rows($result)) {
while($place = mysql_fetch_assoc($result)) {
$places[] = array('place'=>$place);
}
}
if($format == 'json') {
/* output in json format */
header('Content-type: application/json');
echo json_encode(array('places'=>$places));
}
else {
/* output in xml format */
header('Content-type: text/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<places>';
foreach($places as $index => $place) {
if(is_array($place)) {
foreach($place as $key => $value) {
echo '<',$key,'>';
if(is_array($value)) {
foreach($value as $tag => $val) {
/*echo '<',$tag,'>',htmlentities($val,ENT_QUOTES,"utf-8"),'</',$tag,'>';*/
echo '<',$tag,'>',$val,'</',$tag,'>';
}
}
echo '</',$key,'>';
}
}
}
echo '</places>';
}
@mysql_close($link);
?>
は、XML出力hereをテストすることができます。
しかし、json formatが返された場合、ギリシャ文字に問題があります。彼らは次のように表示されます。
\ u03b4 \ u03b4 \ u03b5 \ u03c3 \ u03c3 \ u03b4 \ u03b4 \ u03c6
任意のアイデア?前もって感謝します!
P.S. DB設定:MySQLの文字セット:UTF-8 Unicode(utf8)とMySQLの接続照合:utf_8_unicode_ci
なぜjsonの出力が間違っていると思いますか?これらの '\ u ...'は実際には正しいjavascriptです。 – hakre
json_encode JSON_UNESCAPED_UNICODEのオプションがPHP 5.4.0で追加されています。 http://php.net/manual/en/function.json-encode.php – jcubic