note 98108 added to function.str-getcsv
| From: | halilkoklu at gmail dot com | Date: | Wed, 26 May 2010 12:57:16 +0000 |
| Subject: | note 98108 added to function.str-getcsv | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-169621@lists.php.net to get a copy of this message | ||
the function posted by hpartidas was an alternative for me in an environment with PHP < 5.3.
However the following if clause (line 20) is wrong:
<?php
// ...
if (empty($pos_delimiter) && empty($pos_enclosure_start)) {
// ...
?>
it should be
<?php
// ...
if (($pos_delimiter === false) && ($pos_enclosure_start === false)) {
// ...
?>
So the corrected function is:
<?php
if (!function_exists('str_getcsv')) {
function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape
= '\\', $eol = '\n') {
if (is_string($input) && !empty($input)) {
$output = array();
$tmp = preg_split("/".$eol."/",$input);
if (is_array($tmp) && !empty($tmp)) {
while (list($line_num, $line) = each($tmp)) {
if (preg_match("/".$escape.$enclosure."/",$line)) {
while ($strlen = strlen($line)) {
$pos_delimiter = strpos($line,$delimiter);
$pos_enclosure_start = strpos($line,$enclosure);
if (is_int($pos_delimiter) && is_int($pos_enclosure_start)
&& ($pos_enclosure_start < $pos_delimiter) ) {
$enclosed_str = substr($line,1);
$pos_enclosure_end = strpos($enclosed_str,$enclosure);
$enclosed_str = substr($enclosed_str,0,$pos_enclosure_end);
$output[$line_num][] = $enclosed_str;
$offset = $pos_enclosure_end+3;
} else {
if (($pos_delimiter === false) && ($pos_enclosure_start ===
false)) {
$output[$line_num][] = substr($line,0);
$offset = strlen($line);
} else {
$output[$line_num][] = substr($line,0,$pos_delimiter);
$offset = ( !empty($pos_enclosure_start) &&
($pos_enclosure_start < $pos_delimiter) ) ? $pos_enclosure_start : $pos_delimiter+1;
}
}
$line = substr($line,$offset);
}
} else {
$line = preg_split("/".$delimiter."/",$line);
/*
* Validating against pesky extra line breaks creating false rows.
*/
if (is_array($line) && !empty($line[0])) {
$output[$line_num] = $line;
}
}
}
return $output;
} else {
return false;
}
} else {
return false;
}
}
}
----
Server IP: 212.124.37.9
Probable Submitter: 212.37.55.5
----
Manual Page -- http://www.php.net/manual/en/function.str-getcsv.php
Edit -- https://master.php.net/note/edit/98108
Del: integrated -- https://master.php.net/note/delete/98108/integrated
Del: useless -- https://master.php.net/note/delete/98108/useless
Del: bad code -- https://master.php.net/note/delete/98108/bad+code
Del: spam -- https://master.php.net/note/delete/98108/spam
Del: non-english -- https://master.php.net/note/delete/98108/non-english
Del: in docs -- https://master.php.net/note/delete/98108/in+docs
Del: other reasons-- https://master.php.net/note/delete/98108
Reject -- https://master.php.net/note/reject/98108
Search -- https://master.php.net/manage/user-notes.php