Problem with KDE Konqueror and PHP's nl2br() in handling carriage return and newline pairs.
| From: | Robert B. Easter | Date: | Wed, 20 Dec 2000 16:16:12 +0000 |
| Subject: | Problem with KDE Konqueror and PHP's nl2br() in handling carriage return and newline pairs. | ||
| Groups: | php.dev php.dev | ||
| Request: | Send a blank email to php-dev+get-41936@lists.php.net to get a copy of this message | ||
Konqueror shows odd behavior when rendering html containing carriage returns
('\r' 0x0d ^M) that are not paired with a newline ('\n' 0x0a ^J).
In a <textarea> in a <form>, text is entered that contains "\r\n" when the
user presses the Enter key to begin a new line. This input from the user
then goes to PHP's nl2br() function which replaces occurrences of '\n' with
"<br>\n". So an occurrence of "\r\n" becomes "\r<br>\n"
leaving an unpaired
'\r'. I think that nl2br() should instead replace '\n' with
"\n<br>" so that
"\r\n" becomes "\r\n<br>". This would keep the "\r\n" pairs
together and
make Konqueror happy. Netscape has no problem with this.
Attached are two html files. One has instances "\r<br>\n" in it caused by
nl2br(), the other file has been brought into kwrite and then resaved.
Kwrite is smart enough to detect the unpaired carriage returns, which are not
normally used in a UNIX text file (a unix text file just uses a '\n' at the
end of a line, whereas MSDOS uses "\r\n"), and treats the file as an MSDOS
text file. Kwrite creates "\r\n" pairs throughout the file matching every
lone '\n' with a '\r' in front of it, and every lone '\r' that it
finds with
a '\n' after it.
Konqueror does not treat "\r<br>\n" the same as "\r\n<br>" in all
situations.
For instance, with unpaired carriage returns:
<a href="file.html">file</a>^M<br>
^M<br>
^M<br>Hello,
^M<br>
^M<br>there
^M<br>
^M<br>how are you?
was giving me:
file
Hello,
there
how are you?
Without the unpaired carriage returns (^M):
<a href="file.html">file</a>
<br>
<br>
<br>Hello,
<br>
<br>there
<br>
<br>how are you?
gave me:
file
Hello
there
how are you?
The <a> tag makes a difference for some reason. If you remove it or put it
at the end, then the output is the same:
^M<br>
^M<br>Hello,
^M<br>
^M<br>there
^M<br>
^M<br>how are you?
^M<br><a href="file.html">file</a>^M<br>
gave me:
Hello
there
how are you?
file
If this isn't clean enough or no one can duplicate this, I can try to explain
again or make an better example. View the attached html files in Konqueror.
The paired.html file is slightly larger after kwrite added '\r' and some '\n'
to the file to make pairs.
--
-------- Robert B. Easter reaster@comptechnews.com ---------
- CompTechNews Message Board http://www.comptechnews.com/ -
- CompTechServ Tech Services http://www.comptechserv.com/ -
---------- http://www.comptechnews.com/~reaster/
------------
Attachment: [text/html] Contains unpaired newlines and returns which cause rendering trouble in Konqueror unpaired.html
Attachment: [text/html] The same file as unpaired, but resaved with kwrite which recreates newline and return pairs. paired.html
Attachment: [text/html] Contains unpaired newlines and returns which cause rendering trouble in Konqueror unpaired.html
Attachment: [text/html] The same file as unpaired, but resaved with kwrite which recreates newline and return pairs. paired.html