如何过滤字符串中的多个受限制的单词?

时间:2015-01-10 13:31:26

标签: php string validation filter

在我的网站上,我有一个状态更新表单,用户填写该表单以最多160个字符更新其状态。到目前为止,在我的表单上有一些限制,例如:“用户无法发布> 160个字符,如果他添加> 160个字符,则会向他显示警告消息。”这一切都在为我

  

现在我想对用户输入添加限制,这意味着如果用户输入受限制的单词,则不会提交帖子,用户将看到错误消息。

限制词: Facebook Twitter Whatsapp Mxit Qeep
到目前为止,我只能在我的函数中添加一个单词,我想在上面添加所有上述单词,请帮助!感谢

 <?php

 $txt = $_POST['msg'];

 if (strlen($txt) > 160) {
     echo "Your post contains more then 160 chrecters";
     $checking = substr($txt, 160);
     echo "<del style='color:red;'>$checking</del>";
 }

 if (preg_match("/Facebook/", $txt)) {
     echo "the post contains words restricted!";
 }
 //else send data to the database

2 个答案:

答案 0 :(得分:3)

由于字符串很短:

<?php

// Note that this will remove newlines!
$message = filter_input(INPUT_POST, "msg", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_AMP);

// Note the usage of a mutli-byte function.
if (mb_strlen($message) > 160) {
    exit("Your message contains more then 160 characters.");
}

// Array containing the all lower-cased words which are restricted.
$restricted_words = array("facebook", "twitter");

// Lowercase the message for our search (again multi-byte).
$words = mb_strtolower($message);

// Create an array by splitting the words at the grammatically correct word
// delimiter character (a space).
$words = explode(" ", $words);

// Flip the array, so we can directly check with isset() for existence.
$words = array_flip($words);

// Now go through all restricted words and see if they are part of the message.
foreach ($restricted_words as $delta => $restricted_word) {
    if (isset($words[$restricted_word])) {
        exit("Your message contains a restricted word.");
    }
}

我发现你的整个方法存在一个问题,因为你只是检查完美输入的单词。过去许多项目试图对用户和类似的东西强加亵渎过滤器。这就是为什么您经常会看到有人发布fu@#dafuq而非实际发布的单词fuckwhat the fuck。您的用户可能只是采用类似的方式并发布FB而不是Facebook。如果真的需要这样的字过滤器,请重新考虑。如果是,请考虑使用Levenshtein distance检查单词是否相似(这将是一项昂贵的操作并可能产生误报)。


在最后一个注释中,您正在搜索的正则表达式:

<?php

preg_match("/(Facebook|Twitter)/i", $message, $matches);

括号创建一个组,管道用于分隔我们想要匹配的各种替代词。最后但并非最不重要的是,i修饰符用于使整个事件不区分大小写。 (可选)第三个参数将包含匹配项,以便您可以告诉用户在消息中找到了哪些受限制的单词。

答案 1 :(得分:2)

<?php
$restricted_words = array("facebook", "twitter", "google plus"); //add restricted word or character in array
$replace = array(''); // add here word or character with whom you want to replace, i added blank because i want to replace with blank
$message = str_replace($restricted, $replace, $_POST['message']);
?>