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";
}
}
精彩评论