开发者

How to Transform a String from Multi-Line to Single-Line in PHP?

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?


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


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);


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);


The best method I found to make a multi-line string a single line was like this

$newstring = str_replace(array("\r\n", "\n", "\r"), '', $oldstring);

This is similar to other answers but adds "\r\n", which must be the initial part of the array, so that it doesn't double up.


just in case anyone couldn't find a concrete answer, use following method:

$newVariabe = preg_replace('/\s+/', '_', $oldVariable);



source


Only a single line instead of multiple with Keep a tab and blank space between text.

$text="
test1
                                               
                test2


                                     tets4

                                     
                        test5
             test6                   test8                           test9
test10
";

$lines = explode("\r\n", $text);
$data="";
foreach($lines as $line)
{
    if($line=="")
    {
        $isline=1;
    }
    else
        $isline=0;

    if($isline==0 && $line!="")
    {
        $data.=$line."\n";
    }   
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜