我有一个表单,用户可以在其中输入任何内容,例如,假设用户输入:
Hello World!
This is a new line.
This was written after two new lines.
用户使用表单提交的数据将插入到数据库中:
$data = mysqli_real_escape_string($dbc, $_POST['text']);
$sql = "INSERT INTO data (Data) VALUES ('$data')";
$exec = mysqli_query($dbc, $sql);
现在它存储在数据库中,但是当我从数据库中获取文本以显示给用户时,它会显示:
Hello World! This is a new line. This was written after two new lines.
如您所见,新行将被忽略。我还想显示换行符。
我试过了:
$data = mysqli_real_escape_string($dbc, str_replace(''n', '<br>', $_POST['text']));
但这也行不通。显示来自 mysql 的数据时如何显示换行符?
最好将用户输入原封不动地放入数据库中(当然,转义除外(,以防您希望查询用户输入,或稍后更改显示行为。 也就是说,在构建页面并显示数据时,请使用
echo nl2br(htmlspecialchars($row['text'], ENT_QUOTES));
nl2br()
将所有"'r'n"
或"'n"
转换为<br />
,以便它很好地显示。 htmlspecialchars()
将用户最初键入到字段中的任何特殊字符转换为正确的 HTML 转义序列。
代码将起作用,但您的'n
应用双引号而不是单引号括起来。 单引号字符串忽略 PHP 中的转义序列。 但是,如图所示,已经存在用于完成此操作的内置函数。
我相信你想要nl2br
. http://php.net/manual/en/function.nl2br.php str_replace
不起作用,因为您需要双引号中的'n
。就像您正在寻找文字"'"一样。
$data = mysqli_real_escape_string($dbc, nl2br($_POST['text']));