输出换行而不是\ r \n

Ala*_*mri 0 php

我正在使用此方法将数据存储在数据库中:

$content = $_POST['content'];
$content = mysqli_real_escape_string($mysqli,$content);

$stmt = $mysqli->prepare("INSERT INTO na_posts(postuid,content) VALUES (?, ?)");
$stmt->bind_param("ss",$post_id,$content);
$stmt->execute();
$stmt->close();
Run Code Online (Sandbox Code Playgroud)

我使用此代码从数据库中获取数据:

$sql = "SELECT * FROM na_posts WHERE postuid = '" . $id . "'";
$stmt = $mysqli->query($sql);
$row = $stmt->fetch_Object();
echo nl2br($row->content);
Run Code Online (Sandbox Code Playgroud)

但输出是这样的:

嘿这是第一行\ r \n这是第二行

为什么新线条会像这样出现\r\n

如果我删除了对mysqli_real_escape_string()我看过的安全性很重要的调用,它就可以工作.

Nic*_*ick 7

mysqli_real_escape_string如果您正在使用绑定参数,则不需要bind_param.它是一个或另一个,你不需要两者.由于各种原因,绑定参数更好,主要是它更容易构建SQL并且数据库也可以更高效(因为即使绑定值变化,它也可以更有效地执行相同的查询两次).

要输出值,请在HTML中使用htmlspecialcharsAlamri提到的内容.大多数体面的模板引擎都允许你默认转义值,这样你就不必每次都记得逃避.例如,Symfony将在其模板中默认转义值(其他PHP Web框架可用).

  • @Alamri你应该通过`htmlspecialchars()`运行你的输出来防止XSS:`echo nl2br(htmlspecialchars($ row-> content));` (2认同)