protected function GetLine()
    {
        $sLine = fgets($this->fp, 2048 * 16);
        if (false === $sLine) {
            return $sLine;
        }
        // find out if the line contains an uneven number of '"'. if so, we assume, that the line contains a line break
        $sLine = trim($sLine);
        $aTmpParts = explode('"', $sLine);
        if (1 != (count($aTmpParts) % 2)) {
            // need to read until we find the first '"'...
            $bDone = false;
            do {
                $sTmpLine = fgets($this->fp, 2048 * 16);
                if (false === $sTmpLine) {
                    $bDone = true;
                } else {
                    $sTmpLine = trim($sTmpLine);
                    $sLine .= "\n".$sTmpLine;
                    $aTmpParts = explode('"', $sTmpLine);
                    if (1 != (count($aTmpParts) % 2)) {
                        $bDone = true;
                    }
                }
            } while (!$bDone);
        }
        $sLine = utf8_encode($sLine);
        $aParts = explode($this->sLineSplit, $sLine);

        // strip quotes
        foreach (array_keys($aParts) as $sIndex) {
            $aParts[$sIndex] = trim($aParts[$sIndex]);
            if ('"' == substr($aParts[$sIndex], 0, 1) && '"' == substr($aParts[$sIndex], -1)) {
                $aParts[$sIndex] = substr($aParts[$sIndex], 1, -1);
            }
        }
        reset($aParts);

        return $aParts;
    }