2011-06-18 14 views
1

私は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

+2

なぜjsonの出力が間違っていると思いますか?これらの '\ u ...'は実際には正しいjavascriptです。 – hakre

+0

json_encode JSON_UNESCAPED_UNICODEのオプションがPHP 5.4.0で追加されています。 http://php.net/manual/en/function.json-encode.php – jcubic

答えて

4

json_encode()は、\uxxxxのUnicode文字をエンコードします。それは正常です。 JSはそれらを理解します

+0

なぜこれはギリシャ文字でのみ起こるのですか?それはutf-8でも英語はOKです!私は[レスポンス・ストリングJSONValue]を使って出力が目的のCで消費されるようにしたいと考えています... – eXtechNewbie

+0

大丈夫です、ちょうど試しましたが、ちょうどそのまま動作します、あなたの助けてくれてありがとう! – eXtechNewbie

関連する問題