--- node_import.module	2008-11-11 04:37:58.000000000 -0500
+++ node_import.module.new	2009-01-15 12:51:53.000000000 -0500
@@ -83,6 +83,13 @@ function node_import_settings() {
     '#description' => t('Enter the symbol that wraps text fields in your CSV files. Default: double-quotation marks ["].'),
     '#default_value' => variable_get('node_import_csv_qualifier', '"'),
   );
+  $form['node_import_csv_parser'] = array(
+    '#type' => 'select',
+    '#title' => t('CSV Parser'),
+    '#description' => t('fgetcsv is a native php csv parser that can have problems parsing some files. Node_import parser is a parser bundled with this module. If one isn not able to parse your CSV try the other.'),
+    '#options' => array("node_import" => "node_import","fgetcsv" => "fgetcsv"),
+    '#default_value' => variable_get('node_import_csv_parser', 'node_import')
+  );
   return system_settings_form($form);
 }
 
@@ -809,79 +816,87 @@ function _node_import_csv_get_row($filep
     }
     $handle = fopen($filepath, 'r');
   }
+  
+  $csv_parser = variable_get('node_import_csv_parser','node_import');
+  //Parse Resultins with CSV
+  if($csv_parser == 'fgetcsv') {
+    //Modified to use native fgetcsv
+    $size = variable_get('node_import_csv_size', 10000);
+    $delimiter = variable_get('node_import_csv_separator', ',');
+    return fgetcsv($handle, $size, $delimiter);
+  }
+  //Parse results with node_import native csv parser
+  else {
+    // fgetcsv() is buggy with special chars at the beginning of fields,
+    // let's create our own fgetcsv().
+    // Main code taken from http://de.php.net/manual/en/function.fgetcsv.php#75332
+
+    $length = variable_get('node_import_csv_size', 10000);
+    $delimiter = variable_get('node_import_csv_separator', ',');
+    $qualifier = variable_get('node_import_csv_qualifier', '"');
+    $escape = variable_get('node_import_csv_escape', '\\');
+
+    $fields = array();
+
+    $str = '';
+    while ($str == '') { // Skip empty lines
+      if (feof($handle)) {
+        return FALSE;
+      }
+      $str = trim(fgets($handle, $length));
+    }
 
-  // return fgetcsv($handle, $size, $separator);
-  //
-  // fgetcsv() is buggy with special chars at the beginning of fields,
-  // let's create our own fgetcsv().
-  // Main code taken from http://de.php.net/manual/en/function.fgetcsv.php#75332
-
-  $length = variable_get('node_import_csv_size', 10000);
-  $delimiter = variable_get('node_import_csv_separator', ',');
-  $qualifier = variable_get('node_import_csv_qualifier', '"');
-  $escape = variable_get('node_import_csv_escape', '\\');
-
-  $fields = array();
-
-  $str = '';
-  while ($str == '') { // Skip empty lines
-    if (feof($handle)) {
-      return FALSE;
-    }
-    $str = trim(fgets($handle, $length));
-  }
-
-  $multiline = FALSE;
-  while (strlen($str) > 0) {
-    $str = ltrim($str);
-
-    if ($str[0] == $delimiter && !empty($fields)) {
-      $str = ltrim(substr($str, 1));
-    }
-
-    if ($str[0] == $qualifier) {
-      $inside = TRUE;
-      $value = '';
-      while ($inside) {
-        $newvalue = '';
-        for ($i = 1; $i < strlen($str); $i++) {
-          if (($str[$i] == $qualifier) && ($str[$i - 1] != $escape)) {
-            $str = $multiline ? substr($str, (strlen($newvalue) + 2)) : substr($str, (strlen($value) + 2));
-            $value = str_replace(($escape . $qualifier), $qualifier, $value);
-            $inside = FALSE;
-            $multiline = FALSE;
-            break;
-          }
-          $value .= $str[$i];
-          if ($multiline) {
-            $newvalue .= $str{$i};
-          }
-        }
-        if ($inside) {
-          if (feof($handle)) {
-            $inside = FALSE; // End of file reached.
+    $multiline = FALSE;
+    while (strlen($str) > 0) {
+      $str = ltrim($str);
+
+      if ($str[0] == $delimiter && !empty($fields)) {
+        $str = ltrim(substr($str, 1));
+      }
+
+      if ($str[0] == $qualifier) {
+        $inside = TRUE;
+        $value = '';
+        while ($inside) {
+          $newvalue = '';
+          for ($i = 1; $i < strlen($str); $i++) {
+            if (($str[$i] == $qualifier) && ($str[$i - 1] != $escape)) {
+              $str = $multiline ? substr($str, (strlen($newvalue) + 2)) : substr($str, (strlen($value) + 2));
+              $value = str_replace(($escape . $qualifier), $qualifier, $value);
+              $inside = FALSE;
+              $multiline = FALSE;
+              break;
+            }
+            $value .= $str[$i];
+            if ($multiline) {
+              $newvalue .= $str{$i};
+            }
           }
-          else {
-            $str = "\n" . fgets($handle, $length); // We need to read more data, multiline field.
-            $multiline = TRUE;
+          if ($inside) {
+            if (feof($handle)) {
+              $inside = FALSE; // End of file reached.
+            }
+            else {
+              $str = "\n" . fgets($handle, $length); // We need to read more data, multiline field.
+              $multiline = TRUE;
+            }
           }
         }
       }
-    }
-    else {
-      if (strlen($str) > 0) {
-        $end = strpos($str, $delimiter);
-        $value = ($end !== false) ? substr($str, 0, $end) : $str;
-        $str = substr($str, strlen($value));
-      } else {
-        break;
+      else {
+        if (strlen($str) > 0) {
+          $end = strpos($str, $delimiter);
+          $value = ($end !== false) ? substr($str, 0, $end) : $str;
+          $str = substr($str, strlen($value));
+        } else {
+          break;
+        }
       }
-    }
 
-    $fields[] = $value;
+      $fields[] = $value;
+    }
+    return $fields;
   }
-
-  return $fields;
 }
 
 /**
