0

我写了一小段 php,它从 xml 提要中获取项目(在本例中为产品)。我使用 simplexml_load_file 将提要的各个部分分配给变量。

它工作得很好,我正在将结果输出到 csv 文件。我遇到的问题是 xml 中的某些项目是 html 描述并且其中包含换行符。这破坏了 csv,因为它将这些视为新行。

为了解决这个问题,我在 csv 的每一行中添加了一个行尾字符串,我试图从描述中删除所有 \n\r,然后用 \n 替换 eol 字符串,这应该可以使 csv 工作.

我可以用记事本++手动完成,但是用php尝试它似乎不起作用。

下面是我尝试过的代码,但我可能搞砸了,因为我以前从未这样做过,而且它似乎不起作用。生成的 csv 仍然具有原始换行符,并且 eol 字符串仍然存在。

//Get The Short and Long Descriptions from the $_item in the XML
   $short_Description = $_item->short_description;
   $description = $_item->description;

//OK now we need to firstly remove all the \n\r \n \r from the descriptions and once that's done replace "FEOL," with \n. Easy!

// Lets strip the LF and CR from the descriptions   
    $new_Line = array('\n\r', '\n', '\r');
    $replace = '';

    $short_Description = str_replace($new_Line, $replace, $short_Description);
    $description = str_replace($new_Line, $replace, $description);

// OK now we have one big long line lets add the CR or maybe LF back at the end of each line where we've put the FEOL place holder
    $eol   = 'FEOL,';
    $replace = '\r';

    $short_Description = str_replace($eol, $replace, $short_Description);
    $description = str_replace($eol, $replace, $description);

只是想知道他们是否有明显的我遗漏的东西,或者我做错了。任何帮助将不胜感激。奈杰尔

4

2 回答 2

1

您在这里替换“slash n”和“slash r”而不是 LF 和 CR 字符:

$new_Line = array('\n\r', '\n', '\r');

使用双引号:

$new_Line = array("\n\r", "\n", "\r");

您可以自己看到差异:

<?php
print '\n';

将打印:\n

尽管

<?php
print "\n";

将打印一个换行符

您确定它应该是“\n\r”而不是“\r\n”吗?

于 2013-09-21T12:04:47.283 回答
0

这是来自 PHP 文档站点的示例:

http://php.net/manual/en/function.str-replace.php

$str     = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order   = array("\r\n", "\n", "\r");
$replace = '';

$newstr = str_replace($order, $replace, $str);

如您所见,您应该在每个数组项周围使用双引号,并且您应该\r\n像以前那样替换\n\r

于 2013-09-21T12:17:55.550 回答