Edit report at http://bugs.php.net/bug.php?id=54109&edit=1
ID: 54109 Updated by: [email protected] Reported by: fake at example dot com Summary: display_errors setting causes unwanted changes in errors reported -Status: Open +Status: Verified Type: Bug Package: *Configuration Issues Operating System: any PHP Version: trunk-SVN-2011-02-27 (SVN) Block user comment: N Private report: N Previous Comments: ------------------------------------------------------------------------ [2011-02-27 03:08:43] fake at example dot com Description: ------------ Following functions may report E_WARNING when invalid utf8 sequence detected. json_encode htmlspecialchars htmlentities However, they only issue the warning if display_errors is OFF. display_errors should not dictate whether the warning is triggered. They behave this way because of following dumb logic in source code if (!PG(display_errors)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid UTF-8 sequence in argument"); } ext/standard/html.c php_escape_html_entities_ex ext/json/json.c json_escape_string This is more or less a repeat of http://bugs.php.net/bug.php?id=52397 which unfortunately got marked bogus. Test script: --------------- ini_set('display_errors', 1); json_encode("\xFF"); var_dump(error_get_last()); echo "-------\n"; ini_set('display_errors', 0); json_encode("\xFF"); var_dump(error_get_last()); //these have same problem //htmlspecialchars("\xFF", ENT_COMPAT, 'utf-8'); //htmlentities("\xFF", ENT_COMPAT, 'utf-8'); Expected result: ---------------- I expect both calls to error_get_last() should not return null. Also, I should have two entries in my error log. Actual result: -------------- First call to error_get_last() returns null, second call works. Only one message in error log. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54109&edit=1
