Как я могу использовать одинарные кавычки с вложенными вызовами eval ()? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь использовать одинарные кавычки с вложенными вызовами к eval():

eval('eval(\'echo 'hi\';\');');

Однако это вызывает следующую ошибку:

синтаксическая ошибка, неожиданная 'hi'(T_STRING)

Как использовать одинарные кавычки и устранить эту ошибку?

1 Ответ

0 голосов
/ 09 февраля 2019

У вас проблема с выходом из одинарных кавычек.Вы можете использовать двойные кавычки вместо "hi" вместо 'hi':

eval('eval(\'echo "hi";\');');

Если вам нужно использовать одинарные кавычки, обратные слэши, которые выходят из одинарных кавычек, сами должны быть экранированы паройдополнительных обратных косых черт (\\);то есть:

eval('eval(\'echo \\\'hi\\\';\');');

Это приводит к:

hi

Как вы можете себе представить, это быстро запутается, когда уровень вложенности возрастет.

Стоит отметить, что eval() считается опасным, и вы должны использовать его только в очень преднамеренных обстоятельствах, когда вы тщательно оценили, что при его использовании нет риска, и нет более эффективных способов добиться этого.что ты пытаешься сделать.

Как указано в документации PHP :

Осторожно Языковая конструкция eval() очень опасна, поскольку допускает выполнение произвольныхКод PHPТаким образом, его использование не рекомендуется.Если вы тщательно проверили, что нет другого выбора, кроме как использовать эту конструкцию, обратите особое внимание на то, чтобы не передавать в нее какие-либо данные, предоставленные пользователем, без предварительной их правильной проверки.

Стоит поискать переполнение стека длянекоторые обсуждение его использования .

Надеюсь, это поможет:)

...