2016-01-22 49 views
0

我在PHP中編譯json_decode()函數時出現問題。我有followig JSON文件:PHP json_decode沒有從變量獲取代碼

{ 
    "var1":"data1", 
    "var2":"data2", 
    "var3":"data3", 
    "snippet":"<?php\n\necho \"hello world\";" 
} 

我想保存代碼出於多種原因json文件,但json_decode()並不想輸出。 這裏是我使用了用於獲取數據的代碼:

$str_data = file_get_contents("json_files/".$new.".json"); 
$data = json_decode($str_data,true); 

後來我只是簡單地使用它來獲取所有數據:

echo $data['snippet']; 

這個工程只是VAR1/VAR2/VAR2罰款不與代碼。

+1

究竟是如何不工作?含義:輸出是什麼,預期輸出是什麼? –

+3

'<?php'將在echo語句中可能被作爲HTML標記的開始,因此您無法「看到它」。嘗試「查看源代碼」,我敢打賭。 – Repox

+0

@FranzGleichmann預期的輸出應該是這樣的:<?php echo「hello world」; (有中斷),但我只有兩個空行...... –

回答

2

如果您希望從字符串執行PHP腳本,可以使用eval() 但是請記住,如果不正確地清理數據,該函數可能很危險。

您當前的代碼不起作用,因爲它是一個字符串,並且PHP解釋器不會將其作爲腳本標記提取出來,而是將其註釋掉,從而導致出於安全原因,因此僅將其顯示在html頁面的源代碼中。

編輯通過下面的評論:

$json = '{ 
    "var1":"data1", 
    "var2":"data2", 
    "var3":"data3", 
    "snippet":"<?php\n\necho \"hello world\";" 
}'; 

echo htmlentities(json_decode($json)->snippet); 
echo htmlentities(json_decode($json, true)['snippet']); 
echo str_replace('<', '&lt;', json_decode($json, true)['snippet']); 

// Choose your method.. all works. 
+0

我不是要執行的代碼,只顯示 –

+1

然後,你應該使用'htmlentites()'和下一次清除你問什麼。 – Xorifelse

-1
<?php 
$json = '{ 
"var1":"data1", 
"var2":"data2", 
"var3":"data3", 
"snippet":"?php\n\necho \"hello world\";" 
}'; 
$data = json_decode($json); 
header("Content-Type: text/html"); 
echo $data->snippet; 
?> 

我試着用上面的代碼。經過一段時間才發現..「<」導致php標籤出現問題。

嗯,我想你不能用這個

2

測試脫身如下:

<?php 
$str_data = ' 
{ 
    "var1":"data1", 
    "var2":"data2", 
    "var3":"data3", 
    "snippet":"<?php\n\necho \"hello world\";" 
}'; 

$data = json_decode($str_data,true); 

echo $data['snippet']; 

給我下面的輸出:

<?php 

echo "hello world"; 

如果你在瀏覽器中查看此,你可能沒有看到它,因爲瀏覽器讀取的是HTML。

-1

使用var_dump查看數據是否正確?

$str_data = file_get_contents("json_files/".$new.".json"); 
 
var_dump($str_data);