noganno
10/18/2015 - 5:21 AM

fgetcsv и проблемы с кирилицей

fgetcsv и проблемы с кирилицей

<?php 
function fgetcsv2($f_handle, $length, $delimiter = ';', $enclosure = '»')
	{
		if (!strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
			return fgetcsv($f_handle, $length, $delimiter, $enclosure);

//если указатель на файл не задан, то возвращаем false
		if (!$f_handle || feof($f_handle))
			return false;

//если разделитель не задан, то возвращаем false
		if (strlen($delimiter) > 1)
			$delimiter = substr($delimiter, 0, 1);
		elseif (!strlen($delimiter))
			return false;

		if (strlen($enclosure) > 1) // There _MAY_ be an enclosure
			$enclosure = substr($enclosure, 0, 1);

		$line = fgets($f_handle, $length);
		if (!$line)
			return false;
		$result = array();
		$csv_fields = explode($delimiter, trim($line));
		$csv_field_count = count($csv_fields);
		$encl_len = strlen($enclosure);
		for ($i = 0; $i < $csv_field_count; $i++) {
			if ($encl_len && $csv_fields[$i]{0} == $enclosure)
				$csv_fields[$i] = substr($csv_fields[$i], 1);
			if ($encl_len && $csv_fields[$i]{strlen($csv_fields[$i]) - 1} == $enclosure)
				$csv_fields[$i] = substr($csv_fields[$i], 0, strlen($csv_fields[$i]) - 1);
			$csv_fields[$i] = str_replace($enclosure . $enclosure, $enclosure, $csv_fields[$i]);
			$result[] = $csv_fields[$i];
		}

		return $result;
	}