Php echo html. Use newline, \n, or not? - php

Is there any difference on this:
echo "</body>\n</html>";
and
echo "</body></html>";
I wonder if the 'newline' has any affect on browser.

Yes, \n does have effect on the output of your HTML. As you can see Here.
echo "</body>\n</html>";
outputs your HTML as:
</body>
</html>
while
echo "</body></html>";
outputs your HTML as
</body></html>

The "\n" doesn't have any effect on the displayed html on the browser. If you want to go to the next line, echo a <br>

The
echo "</body>\n</html>";
have no echo in browser but you can see th effect in source code (the \n is not an html element and is not processed by browser
so you can see an effect in the code generated page (crtl+U) as
</body>
</html>
if you need an effect in browser you should use a proper tag as <br />
echo "</body><br /></html>"; // in this case poorly useful do the fact add a new line between a not (normally useful part

There is no difference in your case. However, newline leads to anonymous text block insertion in case it is between two inline (or inline-block) elements:
<h2>Newline</h2>
<p>
<span>first</span>
<span>second</span>
</p>
<h2>No newline</h2>
<p>
<span>first</span><span>second</span>
</p>
<h2>newline in comment</h2>
<p>
<span>first</span><!--
--><span>second</span>
</p>
There're some techniques to avoid these blocks, like inserting comments or setting font-size: 0 for container element.
Lotta details might be found in the article.

Related

New line ("\n") in PHP is not working

For some strange reason, inserting echo "\n"; and other scape sequence characters are not working for me, that's why I am just using <br /> instead.
The images of the results of examples in books and other documentations seems just alright. I'm currently using XAMPP and already used WAMPP with the same actual result. Why is that?
Edit:
It seems that I cannot understand the concept after comparing your answers with this:
PHP Linefeeds (\n) Not Working
Edit:
Sorry I didn't realized that the link above is referring to a php code writing to a file. I just wonder why I have these few php sample programs that uses \n even though it outputs in a webpage. Thanks everyone.
When you run a PHP script in a browser, it will be rendered as HTML by default. If the books you’re using show otherwise, then either the code or the illustration is inaccurate. You can use “view source” to view what was sent to the browser and you’ll see that your line feeds are present.
<?php
echo "Line 1\nLine 2";
?>
This will render in your browser as:
Line 1 Line 2
If you need to send plain text to your browser, you can use something like:
<?php
header('Content-type: text/plain');
echo "Line 1\nLine 2";
?>
This will output:
Line 1
Line 2
PHP Linefeeds (\n) Not Working is referring to sending output to a file rather than the browser.
You should be looking for nl2br(). This will add line breaks (<br>) to your output which will be rendered by the browser; newlines are not.
The echo "\n" is probably working, just not the way you expect it to.
That command will insert a new line character. From the sounds of it, you're using a browser to view your output. Note that if you wrote an HTML file that had a body contents that looked like:
<p>This
is
a
test </p>
The browser rendering would not include the new lines, and would instead just show "This is a test"
If you want to see the newlines, you could view source, and you'll see that the source code includes the new lines.
The rule of thumb is that if you need new lines in a browser, you need to use HTML (e.g. <br />), while if you want it in plain text, you can use the \n
<br /> is the HTML Tag for new line, whereas
"\n" is to output a new line (for real).
The browser doesn't output a new line each time the HTML file goes to the next line.
You can use the nl2br function to convert \n to <br>
As said before, HTML does not render \n as new line. It only recognizes the <br> html tag
If you are working with HTML (viewing the result in browser for example) you have to use the HTML way of linebreaks which is: <br>
/n only works if it is used as a simple text but here as we code in a html doc it takes it as a HTML text hence you can use </br> tag instead.
PHP outputs on the browser and browser only render output in HTML, any other output format will be ignored by the browser.
If you want browser to keep your standard output format as it is, you should enclose your output under HTML's <pre> tag. It preserves the formatting:
echo "<pre>";
echo "This is first line\nThis is new line";
echo "</pre>";
This will be rendered as
This is first line
This is new line
Alternatively, you can mention content type to be plain text in the header:
header('Content-type: text/plain');
echo "This is first line\nThis is new line";
This will tell the browser to render the output as plain text. And the browser will encolse the output automatically in <pre> tag.
solution is echo nl2br or=> <br>

PHP Tag Removes Last Newline in Document

This issue is purely in the interest of having tidy HTML code output.
In a simple PHP file, you can choose when to have PHP embedded in the document by using the tags. However, it appears that when this tag is used directly above a regular HTML element, the newline separating the two is apparently removed or ignored.
Observe the following code in PHP
<div>
<?php echo "This is some extra text." ?>
</div>
The output is as follows
<div>
This is some extra text.</div>
However, if I add something directly after the tag,
<div>
<?php echo "This is some extra text." ?> Now the newline is honored.
</div>
it appears the newline is honored:
<div>
This is some extra text. Now the newline is honored.
</div>
Again, this is purely a cosmetic issue and has nothing to do with incorrectly rendering a page. I want the source code to be nice and readable, and certain I could add in the first echo the "\n" character at the end, but this does not feel satisfying and would also be rather annoying. Is there any remedy to this problem, or am I just doing something wrong?
This is a long standing issue with PHP. Basically, if your close tag has a newline directly after it, PHP eats it. But if there's some other character immediately after the close tag (even a whitespace), then any linebreaks after it are respected.
E.g.
<?php echo "Hello"; ?>\nWorld
produces:
HelloWorld
And
<?php echo "Hello"; ?>\n\nWorld
produces:
Hello⏎
World
However,
<?php echo "Hello"; ?> \nWorld
produces
Hello ⏎
World
So the workaround is to either remember to add a newline at the end of the output of each block, or to insert a space between the close tag and the newline after it.
Try having it like to force the line break:
<div>
<?php echo "This is some extra text." ?>
</div>
The \n character is invisible to you, but when you add the extra text after, you are hitting return/enter.
If you want the added text to have the newline character, just do the following:
<?php echo "This is some extra text.\n" ?>

PHP: trying to create a new line with "\n"

i'm writing this:
echo "foo";
echo "\n";
echo "bar";
and "bar" is not written in the line below.
What am i doing wrong?
Javi
Newlines in HTML are expressed through <br>, not through \n.
Using \n in PHP creates a newline in the source code, and HTML source code layout is unconnected to HTML screen layout.
If you want a new line character to be inserted into a plain text stream then you could use the OS independent global PHP_EOL
echo "foo";
echo PHP_EOL ;
echo "bar";
In HTML terms you would see a newline between foo and bar if you looked at the source code of the page.
ergo, it is useful if you are outputting say, a loop of values for a select box and you value having html source code which is "prettier" or easier to read for yourself later. e.g.
foreach( $dogs as $dog )
echo "<option>$dog</option>" . PHP_EOL ;
If you want to write plain text, you must ensure the content type is set to Content-Type: text/plain. Example:
header('Content-Type: text/plain');
If you are dealing with HTML, you have two options. One is to inset a new line using <br> (Or <br /> for XHTML). The other is to put the plain text in a <pre> element (In this case "pre" stands for preformatted).
PHP generates HTML. You may want:
echo "foo";
echo "<br />\n";
echo "bar";
if your text has newlines, use nl2br php function:
<?php
$string = "foo"."\n"."bar";
echo nl2br($string);
?>
This should look good in browser
Assuming you're viewing the output in a web browser you have at least two options:
Surround your text block with <pre> statements
Change your \n to an HTML <br> tag (<br/> will also do)
Since it wasn't mentioned, you can also use the CSS white-space property
body{
white-space:pre-wrap;
}
Which tells the browser to preserve whitespace so that
<body>
<?php
echo "hello\nthere";
?>
</body>
Would display
hello
there
We can use \n as a new line in php.
Code Snippet :
<?php
echo"Fo\n";
echo"Pro";
?>
Output:
Fo
Pro
It will be written on a new line if you examine the source code of the page. If you want it to appear on a new line when it is rendered in the browser, you'll have use a <br /> tag instead.
This works perfectly for me...
echo nl2br("\n");
Reference: http://www.w3schools.com/php/func_string_nl2br.asp
Hope it helps :)
This answer was so obvious and it took me forever to figure out:
echo "foo
bar";
I know that looks like it's wrapping. It's not. What I did is I literally hit return halfway through the string, between foo and bar. It creates a new line in the HTML source and makes your PHP look horrible. This was in Linux/Apache.
echo "foo<br />bar";
We can apply \n in php by using two type
Using CSS
body {
white-space: pre-wrap;
}
Which tells the browser to preserve whitespace so that
<body>
<?php
echo "Fo\n Pro";
?>
</body>
Result:
Fo
Pro
Using nl2br
nl2br: Inserts HTML line breaks before all newlines in a string
<?php
echo nl2br("Fo.\nPro.");
?>
Result
Fo.
Pro.
the html element break line depend of it's white-space style property.
in the most of the elements the default white-space is auto, which mean break line when the text come to the width of the element.
if you want the text break by \n you have to give to the parent element the style:
white space: pre-line, which will read the \n and break the line, or
white-space: pre which will also read \t etc.
note: to write \n as break-line and not as a string , you have to use a double quoted string ("\n")
if you not wanna use a white space, you always welcome to use the HTML Element for break line, which is <br/>
$a = 'John' ; <br/>
$b = 'Doe' ; <br/>
$c = $a.$b"<br/>";

Problem printing PHP output on multiple lines

I am newbie to PHP I have written the following program:
$address=array('abc#gmail.com','abc#hotmail.com','def#yahoo.com');
foreach($address as $value)
{
echo "processing $value\n";
}
If you see I have \n in the echo statement but I am not getting the output on new line.
How can I get each output on a new line?
If you are outputting this as HTML then you must of course use a HTML break <br />.
If you're working in a browser, you need to break lines with
<br>
You need to print an HTML line break instead:
<br/>
Since you are printing to a browser
\n will line break properly when you view the source, but not in the HTML display. As mentioned, you need to use the <br/> node for HTML
You may want to wrap your output in a <pre> tag as your browser is expecting HTML and is just collapsing the whitespace. The pre tag will reflect the whitespace (\t \n etc);
Alternately you can use a break tag, or wrap the data in a block display element. (eg: <p> or <div>)

What good is new line character?

I don't really get it: what's the purpose of a new line character?
If I do this:
<?php
echo "This is a test. \n";
echo "This is another test.";
?>
Code results in both sentences being in the same line. Why doesn't the \n causes the second sentence being in second line?
The sentences are each in it's own line, if I do:
<?php
echo "This is a test. <br>";
echo "This is another test.";
?>
But I have also seen people do this:
<?php
echo "This is a test. <br>\n";
echo "This is another test.";
?>
Which essentially results in the same output as the second code snippet. Someone care to explain this?
The HTML standard treats a line break as just another white space character, which is why the <br> tag exists. Note however a line break will work within a <pre> tag, or an element with the white-space:pre CSS style.
The third example is just to make "pretty" HTML: it makes it easier to "view source" and check it by eye. Otherwise, you have a big long string of HTML.
as you have observed there are different ways to create a new line.
<br />
this is not a new line character, this is an XHTML tag which means, it works in XHTML.
correctly speaking it is not a new line character but the tag makes sure, one is inserted = it forces a line break. closing tag is mandatory.
XHTML specs
<br>
this is a HTML tag which forces a line break. closing tag is prohibited.
HTML 4.1 specs
\n
is an escape sequence for the ASCII new line char LF. A common problem is the use of '\n' when communicating using an Internet protocol that mandates the use of ASCII CR+LF for ending lines. Writing '\n' to a text mode stream works correctly on Windows systems, but produces only LF on Unix, and something completely different on more exotic systems. Using "\r\n" in binary mode is slightly better, as it works on many ASCII-compatible systems, but still fails in the general case. One approach is to use binary mode and specify the numeric values of the control sequence directly, "\x0D\x0A".
read more
PHP_EOL
is a php new line constant which is replaced by the correct system dependent new line.
so the message is, use everything in it's right place.
<br> will give you a new line in the user's view; \n will give you a new line in source code, ie. developer's view.
When the html is rendered, only the "<br />" renders the break line. However the markup is much easier to read when "<br />\n" is printed, so that everything is not in one long line.
\n is code based
<br /> is HTML tag based
There is a clear distinction between the two.
Your problem is the way html is rendered. If you look in the source code, the first example will have the two lines on separate lines, but the browser does not see line breaks as breaks that should be displayed. This allows you to have a long paragraph in your source:
rghruio grgo rhgior hiorghrg hg rgui
ghergh ugi rguihg rug hughuigharug
hruauruig huilugil guiui rui ghruf hf
uhrguihgui rhguibuihfioefhw8u
beruvbweuilweru gwui rgior
That would only wrap as the browser needed it to, allowing it to be easily editable at the right line length, but displayed at any resolution.
HTML does not care about new lines in the source code, you can put it all in one line. It will only interpret <br /> as a new line. You should use an \n to beautify your HTML-output though, but the better way is to not output it with PHP, but to use it in the HTML itself and only embed PHP stuff into it, like this:
<ul id="menu">
<?php foreach ($menu_items as $item): ?>
<li>
<a href="<?= htmlspecialchars($item['link']) ?>" title="<?= htmlspecialchars($item['title']) ?>">
<?= htmlspecialchars($item['title']) ?>
</a>
</li>
<?php endforeach; ?>
</ul>
That way you won't have to bother with formatting inside PHP, but you automagically have it, by design, in HTML. Also, you seperate Model-logic and View-logic from each other like this and leave the output to your HTTP Server rather than the PHP engine.
That's because you're creating HTML and view it in a browser, and whitespace is more or less ignored there. Ten spaces don't produce a bigger gap than one space, but that doesn't mean that the space character doesn't work. Try setting the content type to text/plain or look at the HTMLs source to see the effect of the newline.
The correct XHTML syntax for it would be
echo "This is the test code <br />\n";
The <br /> renders a new line onscreen, the "\n" renders a new line in the source coed
The new line character is useful otherwise, such as in a PDF. You're correct that the new line character has very little do with HTML as other people have said, it's treated as another while space character. Although it is useful inside the <pre> tag. It can also be used to format the HTML output to make it easier to read. (It's a little annoying to try to find a piece of HTML in a string that's 1000 characters wide.)
The new line character is also useful when storing data in the database. Usually you want to store the data without HTML special characters such as <br /> so that it can be easily used in other formats (again, such as PDF). On output, you want to use the nl2br() function to convert the new lines to <br />s.
The new line character is is useful for string functions.
For example:
explode( '\n' , $input );
Would split a string by a new line.
str_replace( '\n' , '<br />' , $input );
Would replace every newline in $input with a br tag.
Also because PHP also has a CLI, \n is useful for formatting:
eg.
echo 'Hello world';
Would, in the CLI, output;
Hello worldphp>
echo 'Hello world' . "\n";
would output;
Hello world
php>
Although it also has uses when writing web-based scripts, keep in mind PHP is more than a web engine; it also has a CLI where the br tag is useless.
<br /> is also useless if you're running a script from the command line.
$ php -f file.php
Output <br />$
I know not too many people use PHP from the command line, but it does come up:
file.php:
<?php
print "Output\n";
?>
At the command line:
$ php -f file.php
Output
$

Categories