在我正在为PHP和Mysqli工作的项目中,我必须使用prepare和bind_param来处理我的mysqli语句。在这样做之前我写了这些陈述并且它们工作正常。这是在绑定和准备之前。
$sql = "INSERT INTO comments (commentid, userid, comment, commentdate)
VALUES (NULL, '".$_SESSION["userid"]."', '" . htmlspecialchars($comment, ENT_QUOTES) . "', CURRENT_TIMESTAMP)";
$conn->query($sql);
在我写评论的textarea中,如果我使用enter并移动到下一行,输出将是这样的: Old Line New Line
现在,当我开始绑定值并准备语句时,我的输出有点奇怪。这是代码:
$userid = $_SESSION['userid'];
$stmt = $conn->prepare("INSERT INTO comments (commentid, userid, comment, commentdate)
VALUES (NULL, ?,?, CURRENT_TIMESTAMP)");
$stmt->bind_param("is", $userid, htmlspecialchars($comment, ENT_QUOTES));
$stmt->execute();
由于某种原因,如果我在文本中创建了一个新行,这样做的输出将如下: Old Line / r / nNew Line
我有什么问题我可以解决,以便/ r / n不输出到页面?谢谢你的帮助!
答案 0 :(得分:0)
我发现的问题的解决方案与绑定参数中的html特殊字符无关。事实上,我已经使用mysqli_real_escape_string来检索评论。如果你已经转义了你的字符串,那么就没有必要绑定它了,你也可以绑定它而不必转义!要么有效。
答案 1 :(得分:-1)
输入textarea输入字段的换行符由htmlspecialchars()
函数转换为\r\n
。
首先,要删除\r\n
,您可以使用str_replace()
$escape_comment = htmlspecialchars( $comment, ENT_QUOTES );
$remove_line_breaks = str_replace( "\\r\\n", '', $escape_comment );
或者,为什么不使用strip_tags(),而不是使用htmlspecialchars(),那么您可以决定在注释中允许哪些标记。 注意:除非您知道评论内容的格式正确,否则您可能不想使用strip_tags()
$escape_comment = strip_tags ( $comment, '<a><p><i><strong><li>' );