Req #72945 [Opn->Dup]: Allow to pass empty string as $escape to fgetcsv()

From: Date: Fri, 26 Aug 2016 13:58:43 +0000
Subject: Req #72945 [Opn->Dup]: Allow to pass empty string as $escape to fgetcsv()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-203584@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72945&edit=1

 ID:                 72945
 Updated by:         cmb@php.net
 Reported by:        alex at shopblocks dot com
 Summary:            Allow to pass empty string as $escape to fgetcsv()
-Status:             Open
+Status:             Duplicate
 Type:               Feature/Change Request
 Package:            Filesystem function related
 Operating System:   Mac OS X
 PHP Version:        7.0.10
-Assigned To:        
+Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

Actually, there is already request #51496, so I'm closing this as
duplicate.


Previous Comments:
------------------------------------------------------------------------
[2016-08-26 12:59:19] cmb@php.net

That behavior is caused by fgetcsv() catering for an escape
character (what is pretty much uncommon for CSV). The default
escape character is a backslash, so the attributes values which
contain only a backslash break the parser. You can easily work
around this issue by overriding the escape character to use a
character that isn't contained in the CSV, e.g.

  fgetcsv($csv, 0, ',', '"', '|');

I'm changing this ticket to a feature request, because it would be
useful to be able to pass an empty string as $escape, so the
behavior of fgetcsv() would be more compliant to other CSV
implementations.

------------------------------------------------------------------------
[2016-08-26 09:16:38] alex at shopblocks dot com

Description:
------------
fgetcsv is not correctly getting all of the rows for a CSV file

Test CSV file:

https://gist.github.com/shopblocks/f5aadf8c9f6cc512471393d4053c66bb

As you can see, the file is valid and imports correctly into GitHub, OS X Numbers and Excel.



Test script:
---------------
<?php
function dd()
{
    echo '<pre>';
    array_map(function ($x) {
        print_r($x);
    }, func_get_args());

    die(1);
}

$csv = fopen("test.csv", 'r');

$headers = fgetcsv($csv);
$row = fgetcsv($csv);

dd($headers, $row);

Expected result:
----------------
All 21 columns should be filled

Actual result:
--------------
only 15 columns get filled


Array
(
    [0] => id
    [1] => name
    [2] => variants
    [3] => sku
    [4] => price_web
    [5] => price_rrp
    [6] => price_cost
    [7] => quantity
    [8] => visible
    [9] => status
    [10] => tax_id
    [11] => images
    [12] => price_prefix
    [13] => price_modifier
    [14] => text
    [15] => product_video
    [16] => tax_rate
    [17] => attribute
    [18] => attribute_value
    [19] => manufacturer
    [20] => category_id
)
Array
(
    [0] => 1009
    [1] => Halcyon Scout Light
    [2] => Add a Boltsnap§90mm Stainless Steel Boltsnap§+4.0743
    [3] => HalcyonScout
    [4] => 121.6667
    [5] => 121.667
    [6] => 0.000
    [7] => 1
    [8] => 1
    [9] => 0
    [10] => 1
    [11] => 9282§Halcyon_Scout_Light.jpg§Halcyon_Scout_Light.jpg
    [12] => +
    [13] => 4.0743
    [14] => 
Several Halcyon products evolved out of necessity: the  performance of available manufactured gear
was not acceptable under rigorous  mission critical situations. The Scout is just such a product. 

The Scout  is machined out of a solid rod of delrin for strength and fitted with a proper  voltage
bulb to reduce the risk of failure. Nearly all widely available reserve  lights overdrive the bulb
to create a brighter beam. While overdriving the bulb  is effective for short term use, it increases
the stress on the filament,  resulting in a greater frequency of bulb failure. 

The Scout has a  machined attachment point at the rear of the light and is free from all the 
plastic clips and other assorted snags typically present on mass manufactured  lights. 
 
Specifications: 



Machined from a solid rod of delrin 

5.5 watt bulb 

Approx 3.5 hour burn time 

Uses 3 x C cell batteries (not included)



)


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=72945&edit=1


Thread (3 messages)

« previous php.bugs (#203584) next »