0

パラメータをphpファイルに解析し、file_get_contents()を使用してjsonを取得しようとします。これは私のコードです:

< ?php
    $url = $_GET['url'];
    $url = urldecode($url);
    $json = file_get_contents($url, true);
    echo($json);
? >

これは呼ばれるURLです:http: //vimeo.com/api/v2/channel/photographyschool/videos.json

これは私の結果の一部です:

[{"id":40573637,"title":"All For Nothing - \"Dead To Me\" & \"Twisted Tongues\""}]

などなど...すべてがエスケープされます。結果には\nも含まれます。

後でjson(js内)で作業する必要があるので、エスケープされていないバージョンが必要です!

興味深いことに、私のコードは、たとえば次のjsonで機能します:http: //xkcd.com/847/info.0.json

私の問題は何ですか?

4

4 に答える 4

1

これを使って:

echo json_decode($json);

編集:上記を忘れてください。追加してみてください:

header('Content-Type: text/plain');

その上

$url = $_GET['url'];

それが役立つかどうかを確認します。

于 2012-05-03T19:43:53.527 に答える
1

応答をプロキシ/転送するだけの場合は、正しいContent-Typeヘッダーを使用してそのままエコーします。

<?php
    header('Content-Type: application/json');
    $json = file_get_contents('http://vimeo.com/api/v2/channel/photographyschool/videos.json');
    echo $json;
?>

XSSを引き起こす可能性があるため、渡されるURLに非常に注意する必要があります。

また、APIは低速でリソースを大量に消費するため、結果をキャッシュするか、少なくともセッションに保存して、ページの読み込みごとに繰り返されないようにする必要があります。

<?php
$cache = './vimeoCache.json';
$url = 'http://vimeo.com/api/v2/channel/photographyschool/videos.json';

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

// If a cache file exists, and it is newer than 1 hour, use it
if(file_exists($cache) && filemtime($cache) > time() - 60*60){
    echo file_get_contents($cache);
}else{
    //Grab content and overwrite cache file
    $jsonData = file_get_contents($url);
    file_put_contents($cache,$jsonData);
    echo $jsonData;
}
?>
于 2012-05-03T19:53:07.593 に答える
0

json_decodeを使用する必要があります:http: //php.net/manual/en/function.json-decode.php

于 2012-05-03T19:45:37.233 に答える
0

さらに良いことに、jsonの使用を提供する場所:

json_encode(array(
    "id" => 40573637,
    "title" => 'All For Nothing - "Dead To Me" & "Twisted Tongues"'
));
于 2012-05-03T19:46:11.607 に答える