防止换行符“ \ n”“ \ r”被删除的方法?

时间:2019-07-27 08:45:53

标签: php html mysql database

我似乎遇到了一个问题,其中文本区域中的用户输入包含换行符(用户开始一个新段落),我用real_escape_string清理了它们的输入并插入到MySQL数据库中。问题是,这些换行符未保留。而是变成了一个隆隆的段落。

我正在运行PHP版本7.2.4,并且我尝试重新创建该问题,以查看是否是导致该问题的某些现有代码。通常对别人有用的东西似乎对我没有帮助,例如str_replace和nl2br

if(isset($_POST['post'])) {
  $content = $_POST['content'];

  $content = mysqli_real_escape_string($conn, $content);

  echo "real escaped: " . $content;

  $content = str_replace("\r\n", "<br>", $content);

  echo "str_replaced" . $content;

  echo (nl2br($content, false));

  $insert_query = "INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, '{$content}')";
                   // INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, 'egdhfhj')

  $insert_post = mysqli_query($conn, $insert_query);

  if(!$insert_post) {
    die("QUERY FAILED " . mysqli_error($conn));
  } else {
    echo "Posted successfully";
  }

}

echo "Current posts";

$read_query = "SELECT * FROM stories";

$display_posts = mysqli_query($conn, $read_query);

if (!$display_posts) {
  die("QUERY FAILED " . mysqli_error($conn));
} else {

  while ($row = mysqli_fetch_array($display_posts)) {
    $post_id = $row['post_id'];
    $content = $row['content'];

    echo "<p>" . $post_id . "<p>";
    echo "<p>" . $content . "<p>";
  }
}
?>

基本上,我的目标是采用换行符的形式来输入确切的格式,并按照输入的方式打印出来。当前在我的表单中,如果您输入:

This is one line.
This is the next.

它从数据库条目中打印出“这是一行。这是下一行”。

我在脚本中有几个回声(如您所见),每个回声都会打印 每次都“这是我的第一行\ r \ n这是下一行”。我的所有功能均无作用。我这样做正确吗?

P.S。我是PHP和MySQL的新手,因此,如果语法错误,我不会感到惊讶,但是我发誓我已经看过了,而且从我所看到的来看,一切看起来都是正确的。

2 个答案:

答案 0 :(得分:1)

您可以在PHP中使用{{1}}函数。它将保留您的方面。

答案 1 :(得分:0)

通过使用准备好的语句,可以避免完全执行mysqli_real_escape_string和SQL注入的危险(请研究此主题):

$content = $_POST['content'];
$insert_query = "INSERT INTO `stories` (`post_id`, `content`) VALUES (NULL, ?)";
$stmt = $mysqli_prepare($conn, $insert_query);
mysqli_stmt_bind_param($stmt, "s", $content); /* "s" means this is a string parameter */
mysqli_execute($stmt);
mysqli_close($stmt);