1

我正在尝试阻止垃圾邮件,其中很多是重复出现的单词,有没有办法检查字符串以查看字符串中是否有重复出现的短语?

$string = 'Hello ! Hello ! Hello ! Hello !";

谢谢,

4

3 回答 3

3

substr_count当你知道你在找什么时很好。如果您不知道什么是垃圾邮件词,您可以使用str_word_countand array_count_values

$string = 'Hello! Hello! Hello! Hello! Lorem Ipsum';
$words = str_word_count($string, 1);
$count = array_count_values($words);
print_r($count);

这会给你这个:

Array
(
    [Hello] => 4
    [Lorem] => 1
    [Ipsum] => 1
)

您可以sort()使用此数组并获取字符串中最常用单词的排名。您还应该检查停用词(如“and”、“or”、“me”等)。

于 2012-04-23T13:22:28.003 回答
1

一个快速的谷歌搜索给了我:

http://php.net/manual/en/function.substr-count.php

但是,有更好的反垃圾邮件想法。就像验证码一样。人类垃圾邮件发送者很难捕获。他们会找到绕过您的单词计数器的方法。也许您应该考虑像 Youtube 那样基于用户的垃圾邮件报告方法。

于 2012-04-23T13:16:52.160 回答
0

你可以试试 substr_count(): http ://php.net/manual/en/function.substr-count.php

$string = 'hello ! hello ! hello ! hello !';
echo substr_count($string, 'hello');

当然,如果您想检查字符串中的任何单词是否多次出现……那么效率会大大降低。您可能必须跟踪“已检查单词”列表,并且对于字符串中的每个尚未检查的单词,检查它是否出现多次。

就像 Binarious 提到的,验证码是阻止垃圾邮件的更好方法;-)

于 2012-04-23T13:16:29.817 回答