Sometimes the enclosure parameter of the str_getcsv function doesn't work, so I wrote a function that is equivalent to the function
<?php
function my_str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\') {
$output = array();
if (empty($input) || !is_string($input)) {
return $output;
}
if (preg_match("/". $escape . $enclosure ."/", $input)) {
while ($strlen = strlen($input)) {
$pos_delimiter = strpos($input, $delimiter); $pos_enclosure_start = strpos($input, $enclosure); if (is_int($pos_delimiter) && is_int($pos_enclosure_start) && $pos_enclosure_start < $pos_delimiter) {
$pos_enclosure_start += 1;
$enclosed_str = substr($input, $pos_enclosure_start); $pos_enclosure_end = strpos($enclosed_str, $enclosure); $pos_enclosure_end += $pos_enclosure_start; if ($pos_enclosure_end < $pos_delimiter) {
$output[] = substr($input, 0, $pos_delimiter);
$offset = $pos_delimiter + 1;
} else {
$pos_enclosure_end += 1;
$before_enclosed_str = substr($input, 0, $pos_enclosure_end);
$enclosed_str = substr($input, $pos_enclosure_end); $enclosed_arr = my_str_getcsv($enclosed_str, $delimiter, $enclosure); $enclosed_arr[0] = $before_enclosed_str . $enclosed_arr[0];
$output = array_merge($output, $enclosed_arr);
$offset = strlen($input); }
} else {
if (!is_int($pos_delimiter)) {
$output[] = $input;
$offset = strlen($input);
} else if ($input == $delimiter) {
$output = array_merge($output, ['','']);
$offset = $pos_delimiter+1; } else {
$output[] = substr($input, 0, $pos_delimiter); $offset = $pos_delimiter+1; }
}
$input = substr($input,$offset);
}
} else {
$input = preg_split("/". $escape . $delimiter ."/", $input);
if (is_array($input)) {
$output = $input;
}
}
return $output;
}
?>