我正在尝试阻止垃圾邮件,其中很多是重复出现的单词,有没有办法检查字符串以查看字符串中是否有重复出现的短语?
$string = 'Hello ! Hello ! Hello ! Hello !";
谢谢,
substr_count
当你知道你在找什么时很好。如果您不知道什么是垃圾邮件词,您可以使用str_word_count
and 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”等)。
一个快速的谷歌搜索给了我:
http://php.net/manual/en/function.substr-count.php
但是,有更好的反垃圾邮件想法。就像验证码一样。人类垃圾邮件发送者很难捕获。他们会找到绕过您的单词计数器的方法。也许您应该考虑像 Youtube 那样基于用户的垃圾邮件报告方法。
你可以试试 substr_count(): http ://php.net/manual/en/function.substr-count.php
$string = 'hello ! hello ! hello ! hello !';
echo substr_count($string, 'hello');
当然,如果您想检查字符串中的任何单词是否多次出现……那么效率会大大降低。您可能必须跟踪“已检查单词”列表,并且对于字符串中的每个尚未检查的单词,检查它是否出现多次。
就像 Binarious 提到的,验证码是阻止垃圾邮件的更好方法;-)