2014-06-26 4 views
2

Я хочу вернуть json_encoded строку из формы ввода, как этотПользовательский ввод Json_encode (код php) без eval?

<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 для обработки пользовательского ввода. Не говоря уже о том, что это не будет работать в Windows из-за отсутствия каталога/tmp. Может быть, вы объясните, как это лучше от собственной функции 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); 
// ... 
Смежные вопросы