RFC 2397 (Section 3) states that passes data should be either in base64 encoding or urlencoded.
- First line is a header by default
- Empty/blank lines are ignored
function read_line( $data, $header = [], $delimiter = "\t", $skipped = 0, $counter = PHP_INT_MAX ) { $fo = new SplFileObject('data://text/plain,' . urlencode($data), 'r'); $header = empty($header) ? $fo->fgetcsv($delimiter) : $header; if( $skipped > 0 ) { $fo->seek ($skipped - 1); } while ( !$fo->eof() && $counter-- ) { $data = $fo->fgetcsv($delimiter); if(empty(array_filter($data, "trim"))) continue; yield array_combine($header, $data); } }
Sources: