根据用户 user1830391 在此处提供的答案: PHP fgetcsv() 期间未读取 CSV 文件中的某些字符
我更新了以下代码以使用 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()