Edit report at https://bugs.php.net/bug.php?id=55200&edit=1
ID: 55200
Comment by: lonnyk at gmail dot com
Reported by: dmitry dot dulepov at gmail dot com
Summary: str_getcsv parses lines incorrectly
Status: Open
Type: Bug
Package: Unknown/Other Function
PHP Version: 5.3.6
Block user comment: N
Private report: N
New Comment:
str_getcsv is a conversion tool and not an input validator. Any invalid input
is
surely not going to work correctly and I do not think it is good practice to
account for bad input b/c it would cause extra processing time when it is not
needed.
If the input were:
var_dump(str_getcsv('"123" a , "456" ', ',', '"'))
what would you expect str_getcsv to do?
Previous Comments:
------------------------------------------------------------------------
[2011-07-13 09:10:16] dmitry dot dulepov at gmail dot com
Description:
------------
Putting a space around the separator *and* using quotes around fields adds
spaces to the field. The following line:
"123" , "456"
should produce:
"123" and "456"
but it makes:
"123 " and " 456".
In the RFC4180 the specification suggests that if the field contains quotes,
only the text inside quotes is the content of the field. Here is the formal
gramma:
record = field *(COMMA field)
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
Thus spaces should appear in field only if the field is not quoted.
Test script:
---------------
print_r(str_getcsv('"123" , "456" ', ',', '"'))
Expected result:
----------------
array(
0 => "123",
1 => "456",
)
Actual result:
--------------
array(
0 => "123 ",
1 => "456 ",
)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=55200&edit=1