Reputation: 3712
What is the right way to specify the end of line character of a CSV file with PHP. I have this script to write the 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. The lines should be:
0, id1, http://link1.com 1, id2, http://link2.com
Instead they are:
0, id1, http://link1.com\r\n1, id2, http://link2.com
The CSV reader reads that line as:
id1 http://link1.com\r\n1
Is there a different way of writing the end of line for a CSV?
Upvotes: 8
Views: 19270
Reputation: 61
After look all over the web I found that the problem is due the Auto Detect Line Ending not being enable. Just set it on your code and it should work. It worked for me.
ini_set('auto_detect_line_endings',TRUE);
With the auto_detect enable you can parse the file as a regular file using
$lines = file('your_csv_file.csv');
On my case I'm already parsing the CSV lines 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;
}
Upvotes: 5
Reputation:
\r\n
needs to be enclosed in "
instead of '
so that escape sequences will be interpreted (see documentation):
$linkstring .= $i.','.$url['ID'].','.$url->TITLE.','.$url->URL."\r\n";
Upvotes: 12