2013-09-21 3 views
0

Я написал небольшой бит php, который получает элементы (продукты в этом случае) из корня xml. Я использую simplexml_load_file для назначения различным частям фида переменным.Замена n r строк в php

Он отлично работает, и я выводил результаты в файл csv. Проблема в том, что некоторые элементы в xml являются описаниями html и имеют в них символы строки. Это разрушает csv, поскольку видит эти новые строки.

Чтобы решить эту проблему, я добавил конец строки строки в каждую строку csv, и я пытаюсь вычеркнуть все \ n \ r из описаний, а затем заменить строку eol на \ n, которая должна сделайте работу 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); 

Просто интересно, нет ли у них ничего очевидного, что я пропал без вести, или, может быть, я все исправлю. Любая помощь будет принята с благодарностью. Найджел

ответ

1

Вы заменяете «слэш п» и «слэш г» вместо LF и CR символов здесь:

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

использовать двойные кавычки:

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

Вы можете увидеть разницу самостоятельно :

<?php 
print '\n'; 

Напечатает: \ п

Хотя

<?php 
print "\n"; 

Напечатает символ новой строки

Вы уверены, что это должно быть "\ п \ г", а не "\ г \ п"?

+0

Я попробую. – Go2Pub

+0

Вот и все, спасибо, это доказывает, что я думал все время, я идиот lol – Go2Pub

+0

@ Go2Pub Вам не нужно «\ n \ r» в массиве $ new_Line вообще - эти символы заменяются отдельно в любом случае – user4035

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 как вы делали.

+0

Большое спасибо, одинарные кавычки были проблемой. – Go2Pub

Смежные вопросы