我正在一个简单的消息传递网络上工作。该过程很简单,我输入带换行符的文本并将其保存在数据库中并在另一个div中显示。一切都很好,直到我使用mysqli_real_escape_string()
删除了所有换行符并在一行中显示整个文本
$text = $_POST['new_text'];
$vaild_text = mysqli_real_escape_string($con,trim($text));
$vaild_text = strip_tags($vaild_text);
$breaked_text = nl2br($vaild_text);
$command = "INSERT INTO textTable (text_col)VALUES ('$breaked_text')";
$query = mysqli_query($con,$command);
如果我删除mysqli_real_escape_string()
的所有内容
效果很好,但是出于安全考虑,我不能
我什至更改了nl2br()
的位置,并将其放在mysqli_real_escape_string()
之前和之后
但这没用!
答案 0 :(得分:2)
最安全的方法是使用Prepared Statements:
// Strip the tags and convert the newlines to line breaks
$text = strip_tags($_POST['new_text']);
$breaked_text = nl2br($text);
// Prepare the query
$statement = $con->prepare("INSERT INTO textTable (text_col) VALUES (?);");
$statement->bind_param("s", $breaked_text); // The "s" stands for Strings
// Execute the SQL query
$statement->execute();
使用 Prepared Statements 有一些好处:
sprintf()
函数可以作为连接字符串的替代方法。我做,但还是推荐准备好的声明。您可以在以下答案中找到有关 Prepared Statements 的更多好处和示例:https://stackoverflow.com/a/5662391/3625118
有关bind_param()
函数的更多信息,请参见here。
答案 1 :(得分:0)
尝试一下?
$vaild_text = mysqli_real_escape_string($con,trim($text));
$vaild_text = str_replace('\\n', "\n", $vaild_text);
或者这个:
$text = str_replace("\n", '__NEWLINE__', $text)
$vaild_text = mysqli_real_escape_string($con,trim($text));
$vaild_text = str_replace('__NEWLINE__', "\n", $vaild_text);
是的,注释者是正确的,代码很奇怪,但是我想这是一个遗产。
答案 2 :(得分:0)
我刚刚找到了解决方法,只需使用id nl2br()即可显示文本
NSTableView