У меня есть строка. Это строка, отправленная пользователем. (И вы никогда не должны доверять тому, что пользователь отправил.)
Если в строке существуют определенные (не небезопасные) символы, она должна стать многомерным массивом / деревом. Сначала я попробовал сплиты, регулярные выражения и циклы. Слишком трудно. Я нашел очень простое решение с несколькими простыми str_replace
, и в результате получается строка , которая выглядит как определение массива. Например:
array('body', array('div', array('x'), array(), array('')), array(array('oele')))
Это глупый массив, но его очень легко создать. Теперь эта строка должна стать этим массивом. Я использую eval()
для этого, и мне это не нравится. Так как он отправлен пользователем (и должен иметь возможность содержать что угодно), в этой строке могут быть любые вызовы функций.
Итак, вопрос на миллион долларов: существует ли какой-нибудь var_import
или array_import
, который создает массив из строки и ничего больше не делает (как таинственные, опасные вызовы exec
и т. Д.) )
Да, я пробовал php.net, и ни одна из вышеперечисленных _import
функций не существует.
То, что я ищу, является полной противоположностью var_import
, потому что строка, которую я имею в качестве входных данных, выглядит точно так же, как строка var_export
выведет.
Любые другие предложения, чтобы сделать его более безопасным, чем eval
, также приветствуются! Но я не отказываюсь от текущего метода (он слишком прост).