2017-05-09 9 views
0

おはようございますfile_get_contentsとコピーされた値が一致しません - トリミングされていません

私はまあまあまあです。私はかなり長い間PHPで作業していますが、単純なJSON文字列をデコードすることはできません。

は、だから私はこれまで持っているもの:

問題representating簡単なスクリプト:非常に奇妙何 Comparison があることです。だから、出力が完全に一致しない

<?php 
    $twasiapiraw = file_get_contents("https://twasi.net/api/spendencoins/get/41847584?API_KEY=TWASI_PUBLIC_KEY"); 
    $twasiapifake = '{"code":200,"message":"OK","coins":[{"twitch_id":"41847584","coins":0,"twitch_name":"mekalix"}]}'; 
    var_dump(trim($twasiapiraw)); 
    echo "<br>"; 
    var_dump(trim($twasiapifake)); 
?> 

は、このスクリーンショットは、これは明らかにそれらは異なる長さを有するように見える(One 99、他の96)。私もトリムなしでそれを試してみましたが、最後に改行がある可能性があります。

JSONは有効ですが、デコードしようとすると、PHP Json Error 4 - Syntax Errorが発生します。しかし、私は両方の文字列が同じ長さである場合、これが解決されると確信しています。どのようにして両方の文字列を一致させることができますか?

私は何か助けやtippsありがとう。

+0


」と判断して、ブラウザでこれを表示しようとしていると仮定します。生の出力(ソースの表示)を見たことがありますか?トリムは、文字列内ではなく、先頭と末尾の空白を取り除きます。 JSON文字列の途中に改行やその他の文字がある可能性があります。 – Devon

+0

おそらく、見えない制御文字があります。これを見てhttp://stackoverflow.com/questions/1497885/remove-control-characters-from-php-string –

+0

これらのアイデアをありがとう!デボン私は生のソースの出力を見て、それはまったく同じで、@Fran Cerezo、私はあなたのヒントのために明日、それをチェックします! – Larce

答えて

2

APIから取得する文字列の冒頭にByte Order Markがあります。

削除できます。

if (substr($twasiapiraw, 0, 3) == "\xef\xbb\xbf") { 
    $twasiapiraw = substr($twasiapiraw, 3); 
} 

それは文字列がUTF-8でエンコードされていることを示すためにありますが、json_decodeはとにかくUTF-8でエンコードされた文字列を使用しています。

関連する問題