$sql="select * from table1";
 $query=mysqli_query($cn,$sql);
 while($result=mysqli_fetch_assoc($query)){
        $output[]=$result; }
 print(json_encode($output)); 
如上代码,此时页面为空,没有输出任何数据。但是当我把最后一句换为print_r($output)时却是可以输出查询到的多行数据。或者修改sql语句使得查询结果只有一行时,此时print(json_encode($output))也是可以输出该行数据的。想问问大神这是为什么,为什么结果为多行时用json_encode($output)是空的。

解决方案 »

  1.   

    print_r($output) 能看到什么
      

  2.   

    你的查询结果是 gbk 的
      

  3.   

    echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  
    print只能打印出简单类型变量的值(如int,string)  
    print_r可以打印出复杂类型变量的值(如数组,对象)  echo -- 输出一个或者多个字符串  
    Description  
    void echo ( string arg1 [, string ...] ) //返回值为空  
    echo "你好"," 朋友";  
    print --输出一个字符串  
    Description  
    int print ( string arg )//返回值为整形  
    print "你好朋友";  可以进行下面操作  
    $name=print "nihao \n";  
    $str = 'test print value is $name .';  
    eval("$print=\"$str\";");  
    echo $print;  print_r -- 打印关于变量的易于理解的信息。  
    bool print_r ( mixed expression [, bool return] ) //返回值是布尔型的,参数是mix类型的,可以是字符串,整形,数组,对象类print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。  
    print_r() 将把数组的指针移到最后边。  
    你可以  
    print_r(str);  
    print_r(int);  
    print_r(array);  
    print_r(obj);  
    也可以用var_dump var_export 
      

  4.   

    什么意思,这个和我这个问题有关系吗?如果gbk不行的话为什么只有一行结果的时候print(json_encode())也是可以输出数据的?
      

  5.   

    当然有关系!你的截图中  就是 gbk 字符在 utf-8 页面中的表现
    gbk 中文中,有不少文字组合恰好符合 utf-8 的编码规则,从而不发生错误(实际是一种误判)
    当然是数据越少,误判的几率越大json_encode 只能处理 utf-8 数据
      

  6.   

    好奇怪 昨天不行今天突然就行了,虽然还是乱码。我想请问一下我这些数据是要发给app端的,乱码会不会影响到app端的数据接收,就是那边接收到的数据还是不是我数据库中的原始数据,还是那边也会变成乱码?
      

  7.   

    你输出这应该要看你app那边用的什么编码
      

  8.   

    编码问题。
    json_encode只能处理utf8的数据
      

  9.   

    可能出现的问题,1.编码方式有误,如版主说的,需要utf8的
                                  2.字符串里面有包含换行等特殊字符,需要转义以后才能正确转为json
    类似于这样
    $file_contents = preg_replace("/[\r\n]/", '', $file_contents);
      

  10.   

    可以使用iconv转换utf8
      

  11.   

    我在把数据库编码和php文件编码改为utf-8之后,发现插入中文到数据库的时候数据库中的数据不是中文,是一些乱码,echo出来也是乱码。好奇怪这是为什么