2014-06-26 28 views
2

我想從一個表單輸入返回json_encoded字符串這樣Json_encode用戶輸入(PHP代碼)沒有評估?

<input name="test" value="array(1,2,3)"> 

PHP應該返回:[1,2,3]

我可以EVAL實現它這樣做的:eval("\$str=json_encode($test);");

但隨後運行在用戶的eval輸入聲音就像在尋找麻煩。

還有其他的選擇嗎?

+0

您能否給一些背景,以你想要做什麼? –

+0

我試圖做一個json_encode在線工具... – devBorg

+0

爲什麼不只是echo json_encode($ test); ? – arleslie

回答

0

這裏是從字符串運行PHP代碼的另一種方法不使用eval

function fakeEval($phpCode) { 
    $tmpfname = tempnam("/tmp", "fakeEval"); 
    $handle = fopen($tmpfname, "w+"); 
    fwrite($handle, "<?php\n" . $phpCode); 
    fclose($handle); 
    include $tmpfname; 
    unlink($tmpfname); 
    return get_defined_vars(); 
} 

extract(fakeEval('$test='. $_POST['test'].';')); 
$json = json_encode($test); 

Source

+0

如果我沒有遺漏某些東西,這個與處理用戶輸入的eval一樣不安全。更不用說,由於缺少/ tmp目錄,這在Windows上不起作用。也許你會解釋這是如何從本地eval函數更好? – Mikk

+0

是的,你是對的,它的不安全,你將需要創建一些關鍵字的黑名單保護,同樣的事情可以用'eval'實現,但一些主機提供商禁用eval,你可以在那裏使用它 – Saqueib

0

這將是很容易爲數組PHP來處理以創建輸入:

http://www.php.net/manual/en/faq.html.php#faq.html.arrays

HTML

<input name="test[]" value="1" /> 
<input name="test[]" value="2" /> 
<input name="test[]" value="3" /> 

PHP

<?php 

$test = $_POST['test']; 
$jsonTest = json_encode($test); 
// ...