使用数据库表第2部分禁止的单词应用程序

时间:2012-02-26 12:36:42

标签: php

目标:我想将数据库表中的某些单词存储为禁止使用的单词,以免在帖子中使用。

我已经问过如何使用数据库Banned words application using database table应用禁止的单词应用程序并感谢所有答案。

但是我想要应用一些更改但是第一个是新代码

1-创建简单表单以输入要禁止的单词(ban.php)

<form name="form" method="post" action="add.php">
<input type="text" name="bad" id="bad">
<input type="submit" name="submit" id="submit" size="12" value="submit">
</form>

2 - 现在将通过db(add.php)发布它

<?PHP
require_once("config.php"); // db conn
$bad = $_POST['bad'];
$bad = mysql_real_escape_string($bad);

$sql= "insert into my_table set bad='$bad'";
mysql_query($sql, $conn) or die(mysql_error());

echo "Done bad word added";
?>

3-示例(1)〜感谢Robjong以前的帮助〜

<?PHP
require_once("config.php"); // db conn

$test = "ugly"; // Example

$qry = "SELECT * FROM `my_table` WHERE bad='{$test}'"; // select by value
$result=mysql_query($qry);

if( mysql_num_rows( $result ) ){ // we have a row with the 'bad' word
echo "banned";
}else{
echo "passed";
}
?>

现在我的问题示例(2)

如果我想在my_table中找到$test中存储的任何字词,然后给echo "banned";

,该怎么办?

就像这样

<?PHP
require_once("config.php"); // db conn

$test = "hello world this is sentence with ugly word"; // 'ugly' word found


if( any stored words in my_table found within $test ){ 
echo "banned";
}else{
echo "passed";
}
?>

那么如何做例(2)?!这对我有很大帮助。

3 个答案:

答案 0 :(得分:0)

How do you implement a good profanity filter?

回答同样的问题。我会避免使用数据库,也许可以使用值创建一个包含文件。否则,您可以从所有数据库表构建正则表达式。

另一种选择是针对数据库手动检查每个单词或动态生成查询,搜索每个单词。

答案 1 :(得分:0)

一个天真的解决方案是迭代$ test中的单词并检查每个单词,如例1所示。

答案 2 :(得分:0)

我认为从表中提取所有被禁止的单词并在PHP中进行处理会更快 - 而不是在MySQL中进行处理。为此,您首先要从禁止的单词表中选出每个字符串并将它们放在一个数组中。

完成后,您可以使用array_intersect查看字符串中是否有任何单词,例如

//ASSUMES AN ARRAY OF BANNED WORDS $banned_words AND A STRING TO CHECK $str_check

if(count(array_intersect(array_map('strtolower', explode(' ', $str_check)), $banned_words) > 0) {
    echo "banned";
}
else {
    echo "not banned";
}