ERROR过滤输入中的错误单词并保存到SQL

时间:2014-12-20 14:43:21

标签: php html sql-server input-filtering

我有一个表单,我只想允许文本和数字字段:我的输入过滤器不允许$%^&*()_

我写了以下代码:

输入过滤器

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>
    <body>
        <form class="form-horizontal" method="post" action="for.php" enctype="multipart/form-data">
            <input id="textinput" name="name" type="text" placeholder="Sanoj Lawrence" class="form-control input-md" onkeyup="validate();">
            <input type="submit" class="btn btn-success">
        </form>
        <script>
            $(function() {//<-- wrapped here
                $('.form-control').on('input', function() {
                    this.value = this.value.replace(/[^a-zA-Z0-9@ ]/g, ''); //<-- replace all other than given set of values
                });
            });
        </script>

这很有效。

我的问题我需要过滤坏词并将输入文本保存到数据库中。我写了以下代码保存到数据库:

表格处理代码

<?php

$text = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP);
$text = preg_replace_callback('!\w+!', 'filter_bad_words', $text);
echo $text;

$bad_words = array(
    'word1' => 'se x',
    'word2' => 'SEX',
    'word1' => 's e x',
    'word1' => 's E x',
    'word1' => 'se X',
);

function filter_bad_words($matches) {
    global $bad_words;
    $replace = $bad_words[$matches[0]];
    return isset($replace) ? $replace : $matches[0];
}

$db_password = '123456';
$db_username = 'sanoj';
$conn = new PDO('mysql:host=localhost;dbname=localtest', $db_username, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = $conn->prepare('INSERT INTO filter (cat) VALUES (:cat)');
$data->execute(array(':cat' => $text,))
?>

我正在使用上面的代码将文本保存到数据库,但是当用户输入bad_word_filter does't works时,BAD WORD FILTER选择保存输入,即在数据库中创建字段并且过滤字是保存。我不希望将过滤词保存到SQL

有人可以帮帮我吗?感谢。

1 个答案:

答案 0 :(得分:2)

我无法修复您现有的代码(尽我所能),但使用str_replace()提交以下提示方法:

$string = $_POST['name'];
$words = array('se x', 'SEX', 's e x');
$replacements = array('censored 1', 'censored 2', 'censored 3');

$result = str_replace($words, $replacements, $string);

echo $result;

修改

$input = 'sE x';

$filtered_list = array(
    'sex',
    'sE x',
    'SEX',
);

$replaced = 'beep';
$filtered = str_replace($filtered_list, $replaced, $input);

echo $filtered;