Edit report at https://bugs.php.net/bug.php?id=53916&edit=1
ID: 53916 Updated by: pierr...@php.net Reported by: thasypher at gmail dot com Summary: parse_ini_file unable to handle strings with certain characters -Status: Open +Status: Not a bug Type: Bug Package: Filesystem function related Operating System: Debian 5 PHP Version: Irrelevant -Assigned To: +Assigned To: pierrick Block user comment: N Private report: N New Comment: Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php By default the parse_ini_file function will use INI_SCANNER_NORMAL as the 3rd parameter. This mode will parse the option (like it is doing for php.ini) and will "compute" the values. That's why if you have something like this : [test_normal] test_or_op = 1|2 test_bool = On The test_or_op will be 3 and test_bool will 1. You have a problem with your code because in this mode & ! are operators. If you want to avoid those values to be parsed, you can use the other mode INI_SCANNER_RAW. This mode will parse the same ini as you could expect : test_or_op=1|2 and test_bool=On Previous Comments: ------------------------------------------------------------------------ [2012-06-07 12:36:03] thasypher at gmail dot com I know, but these ini's are generated by some other system that does not properly quote the values. As far as I know there is no requirement for ini's to have values quoted either, so it would be nice if parse_ini_file would properly handle that. ------------------------------------------------------------------------ [2012-06-07 08:22:42] zefr...@php.net I don't know if it will help to find the cause of this bug, but I found that enclosing the string with quotes solves the problem : ini file: --------- [test] some_thing = "R3iDn3!rj3j" test file: ---------- <?php print_r(parse_ini_file('bug.ini', true )); result (as expected): ---------------------- Array ( [test] => Array ( [some_thing] => R3iDn3!rj3j ) ) ------------------------------------------------------------------------ [2011-02-04 13:50:04] thasypher at gmail dot com A sample INI could be: ---- [data] test_case = 1 some_server = localhost more_stuff = 8.8.8.8 [test] somevalue = 1 password_server.domain.tld = h1b{k&Tx$jt2 ---- In this case, it throws an "Error parsing <filename> on line 8. Also with: --- [test] some_thing = R3iDn3!rj3j --- it will fail. So ISTM that special characters are causing issues in the parse_ini_file. ------------------------------------------------------------------------ [2011-02-04 10:46:39] ahar...@php.net What version of PHP are you running? This seems to behave as expected in PHP 5.3.5. Could you also provide a (short) sample file.ini, please? ------------------------------------------------------------------------ [2011-02-03 09:00:14] thasypher at gmail dot com Obviously the test script should not contain a comma next to the true value. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=53916 -- Edit this bug report at https://bugs.php.net/bug.php?id=53916&edit=1