如何使用php在json中显示特殊字符

时间:2014-09-09 10:22:28

标签: php json

我正在为php创建web服务。

在数据库中,有一些行包含html和css define。

从数据库json获取数据时显示空数据。

任何帮助都会有所帮助

实施例

VivendadosPalhaços这显示了我的结果“null”

我的代码:

 <?php

 error_reporting(~E_ALL);
 $format = $_REQUEST['format'];

 if(!isset($format))
 $format = "json";

 if($format == 'json') {

 header('Content-Type: application/json');

  } else if ($format == 'xml') {
  ob_clean();
  header('Content-Type: text/xml; charset=ISO-8859-1');
  echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
  }

  //open database connection
  include 'config.php';
  include 'open_db_connection.php';
  include 'util.php';

  mysql_query("SET NAMES 'utf8'");
  mysql_query("SET CHARACTER SET utf8");
  mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");

  $region = $_REQUEST['region'];
  $method = $_REQUEST['method'];


  if($method == 'GET') {


    if($region == 'Central') 

    {
                $q=$_REQUEST['q'];

                $famille_id = $_REQUEST['famille_id'];
                //print $famille_id; exit;
                $sql_fn = "SELECT * FROM region WHERE id='4'"; //Central Goa
                $result2 = mysql_query($sql_fn) or die(mysql_error());      
                $row2 = mysql_fetch_assoc($result2);

           $sql = "select id,titre,famille_id from categorie where famille_id     =".$famille_id;
                $result     = mysql_query($sql, $db) or die(mysql_error());
                $j=0;
                while ($row = mysql_fetch_assoc($result)) 

                {

          $sql="SELECT *  FROM etablissement where categories LIKE '%".$row['id']."%' AND familles LIKE '%".$row['famille_id']."%' AND region_id LIKE '%".$row2['id']."%'";

                    $result1    = mysql_query($sql,$db) or die(mysql_error());
                    $i=0;
            while($row3 = mysql_fetch_assoc($result1))
            {   

                        $arraycont[$i]['main_category_name'] = 'PARTY';
                        $arraycont[$i]['categories_name'] = $row['titre'];
                        $arraycont[$i]['categories'] = $row['id'];
                        $arraycont[$i]['sstitre'] = $row3['sstitre'];
                        $arraycont[$i]['adresse'] = $row3['adresse'];
                $arraycont[$i]['lieu'] = $row3['lieu']." / ".$row2['nom']." | ".$row['titre'];
                        $arraycont[$i]['nom'] = $row3['nom'];
                        $arraycont[$i]['txtintro'] = $row3['txtintro'];
                        $arraycont[$i]['image'] = $imagepath.$row3['id']."/01.jpg";
                        $arraycont[$i]['latitude'] = $row3['latitude'];
                        $arraycont[$i]['longitude'] = $row3['longitude'];
                        $arraycont[$i]['txtcontact'] = $row3['txtcontact'];
                        $arraycont[$i]['tel'] = $row3['tel'];

                        $i++;
                    }


        $finalarray[$j]["titre"] = $row['titre'];
      $finalarray[$j]["id"] = $row['id'];
        $finalarray[$j]["categories"] = $arraycont;
      $j++;
    }


        echo json_encode($finalarray);  // final output in JSON

   }    



   include 'close_db_connection.php';


   ?>

3 个答案:

答案 0 :(得分:1)

我不知道您的数据库编码是什么,但我认为它是ISO-8859-1,因为您还以此编码输出您的页面。

问题是,根据定义,JSON始终始终 UTF-8编码。此外,PHP的json_encode不接受UTF-8以外的其他编码输入;如果在对象结构中的任何位置遇到不同编码的字符,则相应的节点将为null

以下示例将演示此效果:

$test = array('foo' => 'äöü', 'bar' => 'äöü');
$test['foo'] = mb_convert_encoding($test['foo'], 'ISO-8859-1', 'UTF-8');
echo json_encode($test);

结果:

{"foo":null,"bar":"\u00e4\u00f6\u00fc"}

解决方案:将您的数据库输出转换为UTF-8,将您的HTML文件保存为UTF-8,并将标题设置为UTF-8。

答案 1 :(得分:1)

首先,您必须将数据库表排序规则设置为UTF-8 general ci。 然后在通过select查询获取数据之前,您需要插入这些char设置行。

mysql_query("SET NAMES 'UTF8'");
request_result = executre your select query.

答案 2 :(得分:1)

您的数据必须编码为UTF-8或ISO-8859-1。

http://www.php.net/manual/de/function.json-encode.php

因为如果你试图转换一个非utf8字符数组,你将得到0作为返回值