PHP line break character for csv file

What is the correct way to specify the end of line character of a CSV file with PHP. I have this script to write a CSV file.

<?php ini_set('display_errors', 1); error_reporting(E_ALL); include_once("phpshared.php"); function get_node_urls( $nodeid ) { $nodes = new SimpleXMLElement('linkcards.xml', null, true); $nodesarray = $nodes->xpath("//LINKCARD[@ID='$nodeid']"); $linkstring = ''; $node = $nodesarray[0]; $i = 0; foreach($node->LINKS->LINK as $url) { $linkstring .= $i.','.$url['ID'].','.$url->TITLE.','.$url->URL.'\r\n'; $i++; } echo $linkstring; } echo get_node_urls(trim($_REQUEST['nodeid'])); ?> 

If I load $linkstring , there is no carriage return at the end of each line. Lines must be:

  0, id1, http://link1.com
 1, id2, http://link2.com

Instead, they:

  0, id1, http: //link1.com \ r \ n1, id2, http://link2.com

The CSV reader reads this line as:

  id1 http: //link1.com \ r \ n1

Is there any other way to write end of line for CSV?

+7
source share
2 answers

\r\n must be enclosed in " instead of ' so that escape sequences are interpreted ( see documentation ):

 $linkstring .= $i.','.$url['ID'].','.$url->TITLE.','.$url->URL."\r\n"; 
+9
source

After browsing all over the Internet, I found that the problem was that the line auto-detection was not completed. Just install it on your code and it should work. It worked for me.

 ini_set('auto_detect_line_endings',TRUE); 

With the inclusion of auto_detect, you can parse the file as a regular file using

 $lines = file('your_csv_file.csv'); 

In my case, I already parse CSV strings using str_getcsc

 function parse_my_csv($filename) { $lines = file($filename); $data = array(); for($i=0;$i<count($lines);$i++) { array_push($data, str_getcsv($lines[$i])); } return $data; } 
+3
source

All Articles