3b0f051193
Albeit CSV is still a widespread data exchange format, it has never been officially standardized. There exists, however, the “informational” RFC 4180[1] which has no notion of escape characters, but rather defines `escaped` as strings enclosed in double-quotes where contained double-quotes have to be doubled. While this concept is supported by PHP's implementation (`$enclosure`), the `$escape` sometimes interferes, so that `fgetcsv()` is unable to correctly parse externally generated CSV, and `fputcsv()` is sometimes generating non-compliant CSV. Since PHP's `$escape` concept is availble for many years, we cannot drop it for BC reasons (even though many consider it as bug). Instead we allow to pass an empty string as `$escape` parameter to the respective functions, which results in ignoring/omitting any escaping, and as such is more inline with RFC 4180. It is noteworthy that this is almost no userland BC break, since formerly most functions did not accept an empty string, and failed in this case. The only exception was `str_getcsv()` which did accept an empty string, and used a backslash as escape character then (which appears to be unintended behavior, anyway). The changed functions are `fputcsv()`, `fgetcsv()` and `str_getcsv()`, and also the `::setCsvControl()`, `::getCsvControl()`, `::fputcsv()`, and `::fgetcsv()` methods of `SplFileObject`. The implementation also changes the type of the escape parameter of the PHP_APIs `php_fgetcsv()` and `php_fputcsv()` from `char` to `int`, where `PHP_CSV_NO_ESCAPE` means to ignore/omit escaping. The parameter accepts the same values as `isalpha()` and friends, i.e. “the value of which shall be representable as an `unsigned char` or shall equal the value of the macro `EOF`. If the argument has any other value, the behavior is undefined.” This is a subtle BC break, since the character `chr(128)` has the value `-1` if `char` is signed, and so likely would be confused with `EOF` when converted to `int`. We consider this BC break to be acceptable, since it's rather unlikely that anybody uses `chr(128)` as escape character, and it easily can be fixed by casting all `escape` arguments to `unsigned char`. This patch implements the feature requests 38301[2] and 51496[3]. [1] <https://tools.ietf.org/html/rfc4180> [2] <https://bugs.php.net/bug.php?id=38301> [3] <https://bugs.php.net/bug.php?id=51496> |
||
---|---|---|
appveyor | ||
build | ||
ext | ||
main | ||
pear | ||
sapi | ||
scripts | ||
tests | ||
travis | ||
TSRM | ||
win32 | ||
Zend | ||
.appveyor.yml | ||
.editorconfig | ||
.gdbinit | ||
.gitattributes | ||
.gitignore | ||
.travis.yml | ||
acinclude.m4 | ||
buildconf | ||
buildconf.bat | ||
CODING_STANDARDS | ||
configure.ac | ||
CONTRIBUTING.md | ||
CREDITS | ||
EXTENSIONS | ||
footer | ||
genfiles | ||
header | ||
INSTALL | ||
LICENSE | ||
makedist | ||
Makefile.gcov | ||
Makefile.global | ||
NEWS | ||
php7.spec.in | ||
php.gif | ||
php.ini-development | ||
php.ini-production | ||
README.EXT_SKEL | ||
README.GIT-RULES | ||
README.input_filter | ||
README.MAILINGLIST_RULES | ||
README.md | ||
README.NEW-OUTPUT-API | ||
README.PARAMETER_PARSING_API | ||
README.REDIST.BINS | ||
README.RELEASE_PROCESS | ||
README.SELF-CONTAINED-EXTENSIONS | ||
README.STREAMS | ||
README.SUBMITTING_PATCH | ||
README.UNIX-BUILD-SYSTEM | ||
README.WIN32-BUILD-SYSTEM | ||
run-tests.php | ||
snapshot | ||
UPGRADING | ||
UPGRADING.INTERNALS | ||
vcsclean |
The PHP Interpreter
This is the github mirror of the official PHP repository located at https://git.php.net.
Pull Requests
PHP accepts pull requests via github. Discussions are done on github, but depending on the topic can also be relayed to the official PHP developer mailing list internals@lists.php.net.
New features require an RFC and must be accepted by the developers. See https://wiki.php.net/rfc and https://wiki.php.net/rfc/voting for more information on the process.
Bug fixes do not require an RFC, but require a bugtracker ticket. Always open a ticket at https://bugs.php.net and reference the bug id using #NNNNNN.
Fix #55371: get_magic_quotes_gpc() throws deprecation warning
After removing magic quotes, the get_magic_quotes_gpc function caused
a deprecate warning. get_magic_quotes_gpc can be used to detected
the magic_quotes behavior and therefore should not raise a warning at any
time. The patch removes this warning
We do not merge pull requests directly on github. All PRs will be pulled and pushed through https://git.php.net.
Guidelines for contributors
Testing
To run tests the make test
is used after successful compilation of the sources.
See Creating new test files chapter for more information about testing.