为什么我的其余API获取无效字符?

时间:2018-12-26 11:09:23

标签: php rest file-get-contents

几天以来,我的服务无法使用我通过API获得的信息 JSON格式正确,但是当file_get_contents接收到字符串时,它会在字符串前面添加一些字符。 我最后发现这些无效字符是ASCII 239,187,191 为什么会改变呢?我该怎么做才能避免这个问题?

该服务器是一个丑陋的Windows服务器,我认为这种恐怖来自这里,但不确定,我不拥有它。 该API位于codeigniter上,而不是由我自己制作的,客户端位于我自己的框架上。

如果我使用以下代码搜索响应:

    $test = file_get_contents($test);
    for($i = 0 ; $i < strlen($test); $i++)
    {
        echo $i;
        echo " : ";
        echo $test[$i];
        echo " / ";
        echo ord($test[$i]);
        echo "<br>";
    }


    die;

我有这个结果: 0:�/ 239 1:�/ 187 2:�/ 191 3:c / 99 4:b / 98 5:秒/ 115 6:一个/ 97 7:$ / 36 8:5/53 9:c / 99 10:2/50 11:3/51

API端:

public function listeDossiers($token, $year, $month)
{
    $token=$this->hexToStr($token);

    $token = substr($token,3);
    $connexion = $this->ConnLabo_model->findByToken($token);

    if($connexion !== null){
        header('content-type:application/json');
        $liste = json_encode($this->RendezVous_model->findByLabo($connexion->id_user, $year, $month) );
        echo $liste;
        return;
    }


}

客户端

    $this->view->setTpl('Liste');
    $this->layout->year=$year;
    $this->layout->month=$month;
    $file = $this->restConfig['server'] . "/listeDossiers/" . $this->strToHex(trim($_SESSION['token'])) . '/' . $year . '/' . $month;
    //var_dump($file);die;
    $file = file_get_contents($this->restConfig['server'] . "/listeDossiers/" . $this->strToHex(trim($_SESSION['token'])) . '/' . $year . '/' . $month ) ;
    $this->view->liste = json_decode( $file);

2 个答案:

答案 0 :(得分:0)

我不确定,但可能是因为字符集尝试使用

header('Content-Type: text/html; charset=utf-8');

在您的文件中。

答案 1 :(得分:0)

我找到了解决方案,它是一个文件的字符集不正确(带有BOM的UTF8),我对该文件进行了转换,现在还可以。

感谢您的帮助