1

我对来自 CKEditor textarea 字段的数据有疑问。我正在使用CKEditor 4.4.1. 每当我尝试提交 CKEditor 的内容时,它都会\r\n一次又一次地生成字符。但只有在我清理传入数据时才会发生这种情况。这是我清理传入内容的功能 -

// filter user input
public function filter_data($input)
{
    // if magic quotes are on
    if(get_magic_quotes_gpc()) 
    {
        $input = stripslashes($input);
    }
    $sanitized_data = mysqli_real_escape_string($this->con, trim($input));
    return $sanitized_data;
}

这就是我调用上述函数的方式 -

$post_content = $users_obj->filter_data($_POST['txtpostcontent']);

然后我在 CKEditor 中得到以下输出 -

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

\r\n\r\n

\r\n\r\n

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

\r\n\r\n

但是当我不调用上述函数时,一切都很好,并且\r\n我的内容中没有像我这样的字符。

所以我想知道如何通过保持我的消毒功能来阻止这些字符自动生成?有什么方法可以清理我的内容并且也不会得到这些字符?谢谢。

4

7 回答 7

2

还有一件事是有帮助的:

$text = str_ireplace(array("\r","\n",'\r','\n'),'', $text);

于 2017-04-03T08:43:25.543 回答
2

使用 stripcslashes()。我在 ckeditor 4 中遇到了同样的问题。我从堆栈溢出和文档中尝试了许多解决方案,但没有任何效果。所以我尝试了一个php函数stripcslashes()。在输出数据和编辑数据的地方使用它。

于 2020-03-16T12:00:55.740 回答
0

如果你在 php中使用mysqli_real_escape_string()删除这个.

编辑:为了防止注入使用 prepare() 语句。

编辑 2:如果仍想使用 mysqli_real_escape_string(); 您可以使用-

$text = mysqli_real_escape_string($conn, $_POST["description"]);
$description = str_ireplace(array("\r","\n",'\r','\n'),'', $text);
于 2018-07-16T08:36:17.853 回答
0

这是php 文档中指定的转义换行符\r\n的结果。mysqi_real_escape_string

如果您只关心调试,那么您无需担心这些。如果它因为您将结果用于 mysqli 函数以外的东西而导致您出现问题,那么您需要使用为您的用例设计的不同的清理。

正如其他人所说,如果可以选择,最好使用准备好的语句

于 2019-10-02T12:12:33.797 回答
0

我已经解决了这个问题,结果证明这是一个非常简单的设置。在 config.js 我简单地设置:

config.FormatOutput = false ;

它不再愚蠢 \r\n 插入到我的 html 中

于 2017-04-02T19:50:15.267 回答
0

请停止使用filter_data. 这不是正确的方法。事实上,“消毒”这个词非常含糊。这意味着您想从数据中删除一些信息。大多数时候,您不希望您的应用程序这样做。用户输入的数据应保持原样。您应该以这样的方式设计您的应用程序,以便它能够处理用户提供的任何数据。

魔术引号很久以前就从 PHP 中删除了,get_magic_quotes_gpc()现在不再存在了。

mysqli_real_escape_string()仅当您需要格式化字符串文字以在 SQL 语句中使用时才应使用,如果您将参数绑定与准备好的语句一起使用,则几乎不需要使用此功能。

您遇到此问题的原因是因为您正在使用此功能,这会损害您的数据。请停止使用它并使用适当的安全措施。

于 2020-03-16T13:21:02.827 回答
0

可以试试这个

$text = str_ireplace(['\\\\r', '\\\\n'], "", $text);
于 2018-12-20T05:55:28.017 回答