Am 21.11.2014 um 02:53 schrieb Tjerk Meesters:

>> On 21 Nov 2014, at 02:14, Christoph Becker <cmbecke...@gmx.de> wrote:
>>
>> Apparently, there is a somewhat hidden bug, see <http://3v4l.org/El5Xs>
>> for a simplified test script.  The expected result is
>>
>>  string(14) ""a""b","a\""b""
>>
>> or maybe
>>
>>  string(14) ""a\"b","a\\"b""
>>
>> The actual result makes no sense to me, even though str_getcsv() parses
>> it "correctly”.
> 
> That works exactly for the wrong reasons:
> 1) upon seeing an escape character fgetcsv() will print that and the 
> following character
> 2) fputcsv() actually accepts an escape character too (despite what the 
> documentation says) but treats it in the wrong way by not escaping that and 
> the following character

Ah, I see, thanks for the explanation.  Apparently[1], the $escape
parameter to fputcsv() has been added in PHP 5.5.  I have made a
respective edit at edit.php.net.

BTW: wouldn't it be reasonable to also add the $escape parameter to
SplFileObject::fputcsv()?  For now one has to use
SplFileObject::setCsvControl().

> The expected output, based on the given code should (imo) be:
> 
> string(15) ""a\"b","a\\\"b""
> 
> Or: if the escape character is a double quote:
> 
> string(15) “"a""b",”a\""b””

ACK.  (Even though that would be a BC break.)

> Unfortunately I can’t satisfy all the related bug reports, some decision of 
> “correctness” needs to be made in the form of an RFC.

ACK.  Thanks for taking the time. :)

[1] <http://lxr.php.net/xref/PHP_5_5/ext/standard/file.c#1810> vs
<http://lxr.php.net/xref/PHP_5_4/ext/standard/file.c#1807>

-- 
Christoph M. Becker

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to