I can’t get nl2br function to work after fetching data from my database:
$result = mysql_query("SELECT comments..etc.etc..");
while ($row = mysql_fetch_array($result))
{
echo nl2br($row["comments"]);
}
In database row comments:
\r\nThanks,\r\n
OUTPUT:
Same as in DB:
\r\nThanks,\r\n
If I simply test this out like so it works fine:
<?php
$mystring = "\r\nThanks,\r\n";
echo nl2br($mystring);
?>
OUTPUT:
converts \r \n to <br />
Most likely you are doing escaping twice, when adding your data into DB.
Check your code that adds data to DB and remove unnecessary escaping.
Most likely it’s some senseless “universal sanitization” function.
Well it’s easy.
Let’s take a quote, not a newline to demonstrate. The behavior the same.
Slashes being stripped then data goes to database.
Thus, in the normal case:
source:
It'safter escaping:
It\'sby the query execution slash being stripped and
both in the database and back
It'sin double escaping case:
source:
It'safter escaping:
It\'safter second escaping:
It\\\'sby the query execution slash being stripped and
both in the database and back
It\'swe have our data spoiled.
Just make yourself understand that escaping i not something magical that makes your data “safe” (and, therefore can be done many times, as you probably think). It’s just adding a backslash to certain symbols.