Edit report at http://bugs.php.net/bug.php?id=52851&edit=1
ID: 52851 Comment by: anon at anon dot com Reported by: max at dteam dot us Summary: Bug with eval() parsing strings Status: Bogus Type: Bug Package: Strings related Operating System: Windows PHP Version: 5.3.3 Block user comment: N New Comment: In what way is eval's behavior remotely "funny"? You are explicitly asking it to run this code: echo [[hello!]] brackets; Hence the syntax error. >Seems like eval doesn't really care what quotes are used in code How on Earth do you propose that it should keep track of how it's argument, $code, was generated, and how that string's embedded variable, $bogus_str, was generated, and what quotes were used for it, if indeed it came from the source code at all, and any other of a million possible modifications that might have happened to the strings along the way to affect that? Chances are you don't need eval, because it's almost never needed, and most languages do perfectly well without it. But if you really need it, escape the string or use different quotes. You might have meant to do this: $code = 'echo $bogus_str;'; Or this: $code = "echo \$bogus_str;"; which will both work as long as $bogus_str is in scope, or this, which will work anywhere: $code = 'echo "' . addcslashes($bogus_str, '\"') . '";'; Previous Comments: ------------------------------------------------------------------------ [2010-09-15 12:37:19] max at dteam dot us Well, I suppose after a second thought this is not actially a bug. But the way than eval() treats passed code is anyway kind of funny. I faced the problem when i was writing a snippet for MODX CMS. Seems like eval doesn't really care what quotes are used in code. They should be escaped somehow because there is so much ways where it's difficult to know how exactly the eval() was executed in framework. ------------------------------------------------------------------------ [2010-09-15 12:17:15] [email protected] Sorry, but your problem does not imply a bug in PHP itself. For a list of more appropriate places to ask for help using PHP, please visit http://www.php.net/support.php as this bug system is not the appropriate forum for asking support questions. Due to the volume of reports we can not explain in detail here why your report is not a bug. The support channels will be able to provide an explanation for you. Thank you for your interest in PHP. ------------------------------------------------------------------------ [2010-09-15 12:15:30] max at dteam dot us Description: ------------ eval() function seems to work improperly with double [[ chars in string. Test script: --------------- <?php $bogus_str = "[[hello!]] brackets"; $code = "echo $bogus_str;"; echo $bogus_str; eval($code); ?> Expected result: ---------------- [[hello!]] brackets[[hello!]] brackets Actual result: -------------- [[hello!]] brackets Parse error: syntax error, unexpected '[' in C:\xampp\htdocs\test.php(6) : eval()'d code on line 1 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52851&edit=1
