40 column textarea, text line is 55 characters.
Example 1. wrap=virtual. The textarea will show the text line in two lines, wrapping at the 41st character. When sent to the server, the text line goes as one complete line, no newline characters.
Example 2. wrap=physical. The textarea will show the text line in two lines, wrapping at the 41st character. When sent to the server, the text line actually goes as two lines, with a newline character after the 40th character.
Use a combination of nl2br() and ereg_replace to fix your problem. Use wrap=virtual and then use nl2br() when sending the form info to the server/database. When you populate a page using this data, the <br> is already there. If you are allowing the user to edit, use the ereg_replace() function before showing the text in a textarea, replacing <br> with \n. This will work and is relatively simple.
HTH,
Jim Hawley