2013-07-18 45 views
0

我已經刮掉一些JavaScript(使用simple_html_dom),這是我想出...將JavaScript變量的內容刮到PHP變量中?

$ MyScrape

<script type="text/javascript"> 
var initialInfo = [ 
    [ 
     [29, 30, 'bb1', 'bb2', '02/15/2013 20:00:00', '02/15/2013 00:00:00', 6, 'AT', '1 : 1', '2 : 3', , , '2 : 3'], 
     [ 
      [29, 'bb1', 6.91, [ 
        [ 
         ['pears', [4]], 
         ['kiwis', [20]] 
        ] 
       ], 
       [ 
        [36849, 'abcdefg', 6.24, [ 
         [ 
          ['apples', [3]], 
          ['oranges', [0]] 
         ] 
        ], 5, 'iff', 29, 2, 88, 'abc', 23, 180, 76] 
       ], 
       ['4231', [ 
        [5, 1], 
        [7, 7] 
       ]] 
      ] 
     ] 
    ], 0 
]; 
</script> 

我試圖讓initialInfo內容的內容到PHP變量,這樣我可以做到這一點....

$str = ????; 
$jsonarray = json_decode($str, true); 

foreach($jsonarray as $row) 
{ 
    $id = $row[0][0]; //29 
    $tc = $row[0][1]; //30 
    $ab = $row[0][2]; //bb1 
} 

任何人有一個想法,我怎麼能做到這一點(最好是簡單的)?

+0

者不報,數據是不是JSON。你可以preg_replace的',作物之間的=和;然後json.decode應該可以工作 – dandavis

回答

0

好吧,這是我獲得這項工作....

//Cut out the non-json stuff 
    $start = strpos($MyScrape,'initialInfo = ')+14; 
    $end = strpos($MyScrape,'</script>'); 
    $data = substr($MatchDetails, $start, ($end-$start)); 

//Convert the new string to JSON (as it's not quite right) 

//Made single quotes into double so that JSON can read it. 
    $fixedJSON = str_replace("'", '"', $data); 
//change double commas with blank data inside so JSON can read it. 
    $fixedCommas = str_replace(",,,", ", 0, 0,", $fixedJSON); 
//remove the ending semicolon as JSON can't read it. 
    $removedSemiColon = str_replace(";", "", $fixedCommas); 

$jsonarray = json_decode($removedSemiColon); 

//Now I can actually get stuff out of it... 
    echo $row[0][0]; //29 
    echo $row[0][1]; //30 
    echo $row[0][2]; //bb1 
0

這可能讓你的字符串:

function js_array($str, $array_name) 
{ 
    $pattern = "/$array_name ?\[[\s\S]*?\] ?\= ?[\'\"]([\s\S.]*?)[\'\"];/"; 

    preg_match_all($pattern, $str, $matches); 

    $array = (isset($matches[1])) ? $matches[1] : array(); 

    return $str; 
} 
$str = js_array($MyScrape, 'initialInfo'); 

然後我可能會嘗試json_decode,正如你所提到。

讓我知道它是否工作(或不)!

1

把它當作JSON,需要修復的幾件事情:

  • JSON使用雙引號,而不是單引號。
  • ..., '1 : 1', '2 : 3', , , '2 : 3'],中的兩個連續逗號不是有效的JSON。
  • 您必須修剪變量聲明(var initialInfo =)。
  • 你必須修剪掉那個結尾的分號。

您也可以編寫自己的解析器,因爲此代碼只使用數組文字,字符串和數字。

0

它可能不適用於較舊的瀏覽器,但您可以使用JSON.stringify(initialinfo),並將其存儲到隱藏字段中,然後使用PHP進行提取。