tags:

views:

135

answers:

3

Is there a PHP string function that transforms a multi-line string into a single-line string?

I'm getting some data back from an API that contains multiple lines. For example:

<p>Some Data</p>

<p>Some more Data</p>

<p>Even More Data</p>

I assign that data to a variable, then echo the variable as part/"cell" of a CSV document.

It's breaking my CSV document. Instead of all content showing in one cell (when viewing in OpenOffice Calc), it shows in multiple cells and rows. It should be contained within one cell.

I would like to transform the string into:

<p>Some Data</p><p>Some more Data</p><p>Even More Data<p>

Or, what is the best fix for this?

+3  A: 

This will remove line breaks only, you obviously don't want to remove spaces as this would apply to the string within your paragraph tags.

$str = str_replace(array("\n", "\r"), '', $str);
ILMV
Thanks, but in the api response, there are no instances "\n" or "\r". I tried your example with no success. What else could be causing the new lines?
Try the first method from my answer. See if it works, whitespace can be pain sometimes.
Peter Lindqvist
+1  A: 

You simply need to remove all new line (\n) and carriage return (\r) characters from the string. In PHP this is as simple as:

$string = str_replace(array("\n", "\r"), '', $string);
Dustin Fineout
+1  A: 

Line conversion techniques

Approach 1

To remove anything unnecessary between the closing and opening </p>...<p> tags you can use a regular expression. I haven't cleaned it up so it's just for reference.

$str = preg_replace("/(\/[^>]*>)([^<]*)(<)/","\\1\\3",$str);

It will strip anything between the p tags, such as newlines, whitespace or any text.

Approach 2

And again with the delete-only-linebreaks-and-newlines approach

$str = preg_replace("/[\r\n]*/","",$str);

Approach 3

Or with the somewhat faster but inflexible simple-string-replacement approach

$str = str_replace(array("\r","\n"),"",$str);

Take a pick!

Comparison

Let's compare my methods

Performance

Performance is always relative to the fastest approach in this case the second one.

(Lower is better)

Approach 1   111
Approach 2   300
Approach 3   100

Result

Approach 1
Strips everything between tags

Approach 2 and 3
Strips newline and linebreak characters

Peter Lindqvist