MYSQLi真实转义函数显示新行和回车


MYSQLi real escape function displaying new lines and carriage returns

我有一个文本区域,当我试图通过MYSQLi的real_escape函数和nl2br进行转义和清理时,简单的输出会给我带来奇怪的结果。

我的php代码:

 <?php
 $db = new mysqli('localhost', 'user', 'pass', 'demo');
 if($db->connect_errno > 0){
 die('Unable to connect to database [' . $db->connect_error . ']');
 }
 $postText = nl2br($db->escape_string($_POST['posting']));
  ?>

奇数输出为:

 i love this'r'n'r'nand this is gonna be funn.,

奇怪的是,当我只使用nl2br而不使用real_escape时,会给出很好的输出,这显然无法继续下去,因为我无法信任用户的输入

请帮忙。。

只有当输出将用于SQL查询时,才应应用SQL转义。

  • 如果需要将值输出到页面上,可以使用htmlspecialchars()htmlentities()

  • 如果要在JavaScript文本中使用它,请使用json_encode()

  • 等等。

简言之,每种语境都有自己的逃避;不要把它们弄混。

此外,在将nl2br()写入数据库时,不要使用它;相反,在从数据库中获取它之后再应用它。

是的
此函数的输出不打算打印出来。但仅格式化SQL字符串文字
请注意,此函数也不是为了"净化"任何输入。有关的详细信息,请参阅此处

因此,您永远不应该同时使用这两个函数。

  • 使用escape_string来格式化要动态放入查询中的SQL字符串
  • 仅在将文本打印到HTML页面时使用nl2br

根据你在评论中的问题,当你必须立即打印回你的字符串时,应该没有任何情况
因为在每次POST请求之后,PHP都应该用Location:头来响应,告诉浏览器重新加载页面。重新加载后,您可以从数据库中读取数据并打印出来。