У меня есть следующий код:
<?php
$param = $_GET['param'];
echo $param;
?>
когда я использую это как:
mysite.com/test.php?param=2+2
или же
mysite.com/test.php?param=»2+2″
это печатает
2 2
не
4
Я пробовал также Eval — ни работал
+
закодирован как пробел в query strings
, Чтобы иметь фактический знак дополнения в вашей строке, вы должны использовать %2B
,
Однако следует отметить, что это будет не выполнить фактическое сложение. Я не верю, что возможно выполнить фактическое добавление внутри query string
,
Сейчас. Я хотел бы подчеркнуть, чтобы избежать использования eval
как будто это ваш ответ, вы задаете неправильный вопрос. Это очень опасная часть работы. Это может создать больше проблем, чем стоит, согласно ручным спецификациям для этой функции:
Языковая конструкция eval () очень опасна, потому что она позволяет
выполнение произвольного кода PHP. Таким образом, его использование не рекомендуется. если ты
тщательно проверил, что нет другого выбора, кроме как использовать это
построить, обратите особое внимание, чтобы не передавать любые данные, предоставленные пользователем
в это без надлежащей проверки его заранее.
Таким образом, все, что вы хотите передать в eval, должно быть проверено на очень .. Очень строгие критерии, удаление других вызовов функций и других возможных злонамеренных вызовов & убедитесь, что 100% того, что вы передаете в eval, именно то, что вам нужно. Не больше, не меньше.
Очень простой сценарий для вашей проблемы:
if (!isset($_GET['Param'])){
$Append = urlencode("2+2");
header("Location: index.php?Param=".$Append);
}
$Code_To_Eval = '$Result = '.$_GET['Param'].';';
eval($Code_To_Eval);
echo $Result;
Первые строки с 1 по 4 показывают только, как правильно передать символ, такой как знак плюс, остальные строки кода работают со строкой данных. & как сказал @andreiP:
Если я не ошибаюсь, «+» используется для кодирования URL, поэтому
переводится в%, что в дальнейшем переводит в пробел.
Вот почему вы получаете 2 2
Это правильно. Это объясняет, почему вы получаете ваш текущий вывод & пожалуйста, обратите внимание, используя:
echo urldecode($_GET['Param']);
после кодирования он вернет вас к исходному выводу, которого вы хотите избежать.
Я настоятельно рекомендую изучить альтернативу, прежде чем использовать то, что я написал