额外的空格和换行符PHP自动删除TEXTAREA

My code for the input php file is the following.

<!DOCTYPE html>
<html>
  <body>
    <form name="input" action="welcome.php" method="post">
      Comment: <textarea name="input" rows="5" cols="40"></textarea>
      <input type="submit" value="Submit">
    </form> 
  </body>
</html>

For the output code it is the following.

<html>
  <body>
    Welcome <?php $a=$_POST["input"]; echo $a; ?><br>
  </body>
</html>

When anything with extra spaces and newline are inputted, it automatically gets removed. For example :

When I input:

abcd
cda xyzb

Output is:

Welcome abcd cda xyzb

This is because new line characters are represented as , in the sourcecode you'll see new lines. Whitespaces get truncated if one follows another in HTML.

I suggest you to use the <pre> tag, which does not only save the new lines (like php's nl2br()) but also preserves the whitespaces.

Using <pre>:

<html>
<body>
<pre class="yourStyleForThisPreFormattedText">
Welcome <?php $a = $_POST["input"]; 
echo $a; ?>
</pre>
</body>
</html>

Using special chars (&nbsp;) and PHP functions:

<html>
<body>
Welcome <?php $a = nl2br(str_replace(' ', '&nbsp;', $_POST["input"]), true); 
echo $a; ?>
</body>
</html>

Notice:

For HTML4 and HTML5 use nl2br($str, true);, for XHTML4 use nl2br($str); - the difference is in the output: <br> and <br />. See http://php.net/nl2br

To display newline use nl2br()

<html>
    <body>
        Welcome <?php $a = nl2br($_POST["input"]); 
        echo $a; ?><br>
    </body>
</html>

You can also add <pre> tag to show preformatted text (all whitespaces).

Try this...

Welcome <?php echo htmlentities($_POST['input']); ?>

htmlentities() converts your HTML.

Change

<textarea name="input" rows="5" cols="40"></textarea>

Into

<textarea name="input" rows="5" cols="40" wrap="virtual"></textarea>

You can also use wrap: off, hard, soft, physical