1

我从这样的字符串开始:“我想:\r\n\r\n1。)摆脱这个烂摊子\r\n\r\n\2。)现在请”(这是“清理”用户输入文本)。

所以基本上我的陈述是这样的:

$query = sanitize($_POST['query']); // gives the result string

我想从这个字符串中删除“\r\n\r\n”。到目前为止,我已尝试使用以下方法来做到这一点:

$query = preg_replace("/\r\n\r\n/", " ", $query);

或者

$query = str_replace("\r\n\r\n", " ", $query);

似乎没有一个工作?

但是,如果我执行以下操作:

$query = "I would like to:\r\n\r\n1.) Rid this mess\r\n\r\n\2.) Now Please";
$query = preg_replace("/\r\n\r\n/", " ", $query); // I tried str_replace() too
var_dump($query);
exit;

我得到了我想要的输出......

有人可以向我解释为什么会发生这种情况以及我该如何解决这个问题?

任何建议、意见或建议将不胜感激,因为我几乎不会因为拔头发而秃顶......

谢谢!

编辑 :

这可能有助于功能 sanitize() :

function html($text)
{
    return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}

function htmlout($text)
{
    return html($text);
}

function cleanInput($input)
{
    $search = array(
        '@<script[^>]*?>.*?</script>@si',   // Strip out javascript
        '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
        '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
        '@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments
    );
    $output = preg_replace($search, '', $input);
    $output  = htmlout($output);
    return $output;
}

function sanitize($input)
{
    if (is_array($input))
    {
        foreach($input as $var=>$val)
        {
            $output[$var] = sanitize($val);
        }
    }
    else
    {
        include "C:/wamp/www/includes/inc/main/db.inc.php";
        if (get_magic_quotes_gpc())
        {
            $input = stripslashes($input);
        }
        $input  = cleanInput($input);
        $output = mysqli_real_escape_string($link, $input);
    }
    return $output;
}
4

4 回答 4

1

唯一合适的解决方案

  1. 摆脱sanitize()功能
  2. 使用准备好的语句将数据放入数据库。
  3. 使用htmlout()函数来显示用户的文本。

你可以在这里这里阅读更多

于 2013-02-11T10:46:57.377 回答
1

你有魔术报价吗?

http://php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc

它可能正在逃避你的斜线。

于 2013-02-11T13:37:37.303 回答
0

如果\r\n您的数据库中有文字字符,则需要将斜杠加四倍。

所以理论上你应该使用它来解决问题:

$query = preg_replace("/\\\\r\\\\n\\\\r\\\\n", " ", $query);
于 2013-02-11T10:41:15.873 回答
0

这对我有用

$string = preg_replace("/\\\\r\\\\n\\\\r\\\\n/", "", $string);
于 2014-11-09T08:22:05.193 回答