Основываясь на ответе, предоставленном здесь пользователем user1830391: Некоторые символы в CSV-файле не читаются во время PHP fgetcsv ()
Я обновил свой следующий код, чтобы использовать fgets () вместо fgetcsv (). Он исправил мою первую проблему с символом. это уже не проблема … но …
что, если CSV-файл разделен с использованием; вместо, Некоторые поля будут обертываться с использованием двойных кавычек "", например, один из моих строк разбивается на 2 строки. цитата, открытая в последнем элементе одной строки и закрытая в конце первого элемента следующей строки. В этой ячейке есть «ввести» (/ n). как я должен обращаться с этим кодом. fgetcsv улавливает элементы в двойных кавычках, но я не думаю, что fgets () делает.
function runCSVtoArray() { // --> FOR IMPORT //Function that converts a CSV file to a PHP array. //echo '<span class="success">Chargement du fichier CSV pour importation MYSQL....</span><br />'; $readCharsPerLine = (JRequest::getVar('charsPerLine') > 0) ? JRequest::getVar('charsPerLine') : 1500; /* Import as of 2012-04-16 seem to have max 800chars per line. 1500 is alot of extra. */ ini_set("auto_detect_line_endings", true); iconv_set_encoding("internal_encoding", "UTF-8"); $openfile = $this->imp['importPath'].$this->imp['csvFileName']; if ( file_exists($openfile) ) { //echo '<span class="success">Fichier CSV trouvé....</span><br />'; //echo '<span class="success">Ouverture du fichier : '.$openfile.'</span><br />'; if (($handle = fopen($openfile, "r")) !== FALSE) { //echo '<span class="success">Fichier CSV ouvert... Chargement en cours....</span><br />'; $row_i=0; $this->_importData = array(); /*while (($data = fgetcsv($handle, $readCharsPerLine, ";")) !== FALSE) {*/ while (($the_line = fgets($handle)) !== FALSE) { $data = explode(';', $the_line); $debugoutput = implode('; ', $data).'<br />'; echo ( (JRequest::getVar('encodeutf8')) && ( mb_detect_encoding($debugoutput, "UTF-8") == "UTF-8") ) ? utf8_encode($debugoutput) : $debugoutput.'<br />'; //Debug2 /* $num = count($data); if ($row_i==0) { // TITLE ROW $keyRow = array(); for ($c=0; $c < $num; $c++) { //Making title array with CSV first line //Key for colum if ( (JRequest::getVar('encodeutf8')) && ( mb_detect_encoding($data[$c], "UTF-8") == "UTF-8") ) { $data[$c] = utf8_encode($data[$c]); } if ($data[$c]!="") { $keyRow[$c]=trim($data[$c]); $keyRow[$c]=str_replace('GDWACCENT', '', $keyRow[$c]); //STRIP GDWACCENT, GDW uTF8 fgetcsv fix } else { $keyRow[$c]=''; } } } else { //VALUE ROW... for ($c=0; $c < $num; $c++) { $key = $keyRow[$c]; if ( (JRequest::getVar('encodeutf8')) && ( mb_detect_encoding($data[$c], "UTF-8") == "UTF-8") ) { $data[$c] = utf8_encode($data[$c]); $data[$c]=str_replace('GDWACCENT', '', $data[$c]); //STRIP GDWACCENT, GDW uTF8 fgetcsv fix } if ($data[$c]!="") { $this->_importData[$row_i][$key]=trim($data[$c]); $this->_importData[$row_i][$key]=str_replace('GDWACCENT', '', $this->_importData[$row_i][$key]); //STRIP GDWACCENT, GDW uTF8 fgetcsv fix } } } */ $row_i++; } //End while() //echo '<span class="success">Chargement terminer.... Sauvegarde en cours...</span><br />'; return true; } else { //Incapable d'ouvrir le fichier d'importation. return false; } } else { //FILE NOT FOUND... return false; } } // runCSVtoArray()