2011-11-03 9 views
6

मैं fputcsv() का उपयोग कर सीएसवी आउटपुट को संभालने के लिए एक फ़ंक्शन लिख रहा हूं। मैंने डरावने \r\n मुद्दे के आसपास काम किया है कि बहुत से लोगों के पास fputcsv() (कोड देखें) के साथ है।एक CSV फ़ाइल बनाते समय, मैं फ़ील्ड में n और r वर्णों को कैसे संभालूं?

अब मैं कैसे \r या \n अक्षर है कि एक क्षेत्र में शामिल किए गए हैं (नहीं लाइन खत्म होने वाली रिटर्न \r\n) को संभालने के लिए यह पता लगाने की कोशिश कर रहा हूँ। fputcsv() में पारित होने से पहले इसे किसी तरह से बच जाना चाहिए?

फ़ंक्शन अधिकांश पात्रों के लिए अच्छी तरह से भागने से संभालता है। लेकिन, जब \n किसी फ़ील्ड में डाला जाता है, तो एमएस एक्सेल और Google डॉक्स दोनों में \n के साथ समस्याएं होती हैं और CSV ठीक से लोड करने में विफल रहता है।

/* 
* Revised Get CSV Line using PHP's fputcsv() 
* 
* Used to correct an issue with fputcsv() 
* http://stackoverflow.com/questions/4080456/fputcsv-and-newline-codes 
* MS Excel needs the MS Windows newline format of \r\n 
* 
*/ 

if (!function_exists('get_csv_line')) 
{ 
    function get_csv_line($list, $seperator = ",", $enclosure = '"', $newline = "\r\n") 
    { 
     $fp = fopen('php://temp', 'r+'); 

     fputcsv($fp, $list, $seperator, $enclosure); 
     rewind($fp); 

     $line = fgets($fp); 
     if ($newline && $newline != "\n") { 
      if ($line[strlen($line)-2] != "\r" && $line[strlen($line)-1] == "\n") { 
       $line = substr_replace($line,"",-1) . $newline; 
      } else { 
       die('original csv line is already \r\n style'); 
      } 
     } 
     if ($newline == "\r\n" && substr($line, -2) != "\r\n") { 
      log_message('error', 'function get_csv_line: Error, needs \r\n to be MS Excel friendly!'); 
     } 
     return $line; 
    } 
} 
+0

क्या मुझे बस जगह के साथ फ़ील्ड के भीतर \ n और \ r को प्रतिस्थापित करना चाहिए? – jjwdesign

+3

संबंधित प्रश्न: [एक्सेल के लिए सीएसवी फ़ाइल जेनरेट करना, मूल्य के अंदर एक नई लाइन कैसे है?] (Http://stackoverflow.com/questions/1241220/generating-csv-file-for-excel-how-to-have- एक-न्यूलाइन-इन-ए-वैल्यू) – Anne

+0

मैंने पहले इस तरह कुछ काम किया है, सीएसवी काम करने के लिए एक भयानक चीज है, आप अपने घेरे या अलगाव प्रतीक वाले क्षेत्रों जैसे समस्याओं का भी सामना कर सकते हैं। मैं उन प्रतीकों के लिए कुछ विदेशी भाषा वर्ण चुनने के लिए समाप्त होता हूं, और उन \ n \ r की जांच करने के लिए वास्तव में एक लंबी स्क्रिप्ट के माध्यम से चलाता हूं और सुनिश्चित करता हूं कि पर्याप्त संलग्नक और अलगाव वर्ण हैं। –

उत्तर

3

नहीं हैं, तो \ क्षेत्र के भीतर आर या \ N बस सुनिश्चित करें कि पूरे क्षेत्र डबल कोट्स में है (और है कि शाब्दिक दोहरे उद्धरण चिह्नों डबल-डबल उद्धृत कर रहे हैं) बनाने

एक अंतिम परिणाम के लिए

तो

value1,"so this is a 
multiline value",value2 

जहां 'एक' और 'बहु' या तो एक \ n या \ r द्वारा अलग की (याद रखें, \ r अभ्यस्त एक्सेल पर दिखाई है, लेकिन इसकी वहाँ), तो यह काम किया जाना चाहिए था।

यदि \ n या \ r मान आपके पास PHP सरणी में मौजूद मानों में एम्बेड किए गए हैं, तो इसे पहले से ही उचित रूप से संलग्न किया जाना चाहिए।

0

यूओटीएफ फाइलें जिनमें बीओएम होता है, एक्सेल को सचमुच नई लाइनों का इलाज करने का कारण बनता है, उस क्षेत्र में भी उद्धरण से घिरा हुआ है। (परीक्षण एक्सेल 2008 मैक)

समाधान लाइन फीड की बजाय किसी भी नई लाइन को कैरिज रिटर्न (सीएचआर 13) बनाना है।

संबंधित मुद्दे