Php “防止线路中断的方法”\"&引用\r";从被移除?
我似乎遇到了这样一个问题:文本区域中的用户输入包含一个换行符(用户开始一个新段落),我用real_escape_字符串对其输入进行了清理,并将其插入到MySQL数据库中。问题是,这些换行符不会被保留。相反,它变成了一个冗长的段落 我运行的是PHPversion7.2.4,我试图重新创建这个问题,看看是不是一些现有的代码导致了这个问题。通常对其他人有用的东西似乎对我没用,比如stru替换和nl2brPhp “防止线路中断的方法”\"&引用\r";从被移除?,php,html,mysql,database,Php,Html,Mysql,Database,我似乎遇到了这样一个问题:文本区域中的用户输入包含一个换行符(用户开始一个新段落),我用real_escape_字符串对其输入进行了清理,并将其插入到MySQL数据库中。问题是,这些换行符不会被保留。相反,它变成了一个冗长的段落 我运行的是PHPversion7.2.4,我试图重新创建这个问题,看看是不是一些现有的代码导致了这个问题。通常对其他人有用的东西似乎对我没用,比如stru替换和nl2br if(isset($_POST['post'])) { $content = $_POST['
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>";
}
}
?>
它从数据库条目中打印出“这是一行,这是下一行”
我的脚本中有几个回音(如你所见),每个回音都打印出来
每次“这是我的第一行\r\n这是下一行”。我的所有功能都不起作用。我这样做对吗
另外,我对PHP和MySQL非常陌生,所以如果是语法错误,我不会感到惊讶,但我发誓我已经看过了,从我所看到的来看一切都是正确的。你可以在PHP中使用
nl2br()
函数。它将保留您的方面。通过使用准备好的语句,您可以完全避免执行mysqli\u real\u escape\u字符串和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);
OP想要在一个文本区域中输入一个包含到数据库中的换行符,然后按原样检索。@MohitKumar首先,不是我否决了你。你为什么要做出这样的假设?其次,我的解决方案保留了回车符、换行符和输入中的任何其他字符。它比不使用预先准备好的语句的解决方案更安全。我建议您也调查SQL注入和预处理语句。@MohitKumar如果您仔细查看上面的代码,您可以看到变量$content取自$\u POST['content'],在绑定到预处理语句之前未以任何方式进行修改。
$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);