preg-replace-PHP-问题删除“;r “;从这个字符串:“;我想:


preg replace - PHP - Issues removing " " from this string: "I would like to: 1.) Rid this mess 2.) Now Please"

我以这样的字符串开头:"我想:''r''n''r''n1.)摆脱这场混乱''r''n''r''n2.)现在请"(这是"干净的"用户输入文本)。

所以本质上,我的声明是:

$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;

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

有人能向我解释一下为什么会发生这种情况,以及我如何解决这个问题吗?

任何建议、意见或建议都将不胜感激,因为我拔头发时几乎没有秃头。。。

谢谢!

编辑:

这可能有助于函数消毒():

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;
}

唯一合适的解决方案

  1. 去掉sanitize()函数
  2. 使用准备好的语句将数据放入数据库
  3. 使用htmlout()函数将用户的文本显示回

您可以在此处和此处阅读更多

你有魔术引号吗?

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

它可能是在逃避你的斜杠。

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

因此,理论上你应该使用这个技巧:

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

这对我有效

$string = preg_replace("/''''r''''n''''r''''n/", "", $string);