SpamMarker PHP library
SpamMarker is a simple library for detecting spam in provided strings. It follows the open closed principle by introducing
Spam Filters which are just separate classes used to extend the SpamMarker detecting capabilities., (*1)
The original idea, and actually a slightly different library, is from a lib called Spam Filter by Laju Morrison, which you can find here., (*2)
I was just tired of all sorts of spam which comes from the user input on my projects, so I finally created this., (*3)
Instalation
This library can be loaded into your projects using Composer or by re-inventing the wheel and creating your own autoloader., (*4)
Instalation via composer:, (*5)
composer require gorankrgovic/spam-marker
Setup and basic usage
This should be done once throughout the app., (*6)
use SpamMarker\SpamMarker;
// 1.
// Use some filters
use SpamMarker\Filter\BlackListed;
// 2.
// Initalize the blackisted filter
$blackListed = new BlackListed();
// Add some spammy keywords
$blackListed->add('hacker');
$blackListed->add('attacker');
// 3.
// Initialize the spam marker
$spamMarker = new SpamMarker();
// 4.
// Register the filters
$spamMarker->registerFilter($blackListed);
// 5.
// Check your string against filters
$spamMarkerResult = $spamMarker->check("
Hello, this is some text containing hacker and attacker
and should fail as it has a word that is black-listed
");
// var_dump ( $spamMarkerResult );
// It gives you two objects - is_spam (bool) and messages array
if ( $spamMarkerResult->passed() )
{
// Do some stuff, because the spam marker is passed
echo 'Your string doesn\'t contain the spam';
}
else
{
echo 'String containts the spam!';
}
// If you only want to see if it's failed then just...
if ( $spamMarkerResult->failed() ) {
// Do stuff
}
Each time you call the check() method on a string, it returns a SpamOutput
Object which holds the spam check result and messages., (*7)
You can change various stuff inside such as messages for each filter. with two methods:, (*8)
Calling setOption function:, (*9)
$loadedFilter->setOption('message', 'My own returning error message');
Or by initializing with different config, (*10)
$config = array(
'message' => 'My own custom error message'
);
$blackListed = new BlackListed($config);
Currently provided filters
1. BlackListed Filter:
The black list detector flags a string as a spam if it contains
any of one or more words that has been added to the black list.
Strings could be formed from Regular Expressions or a Character Sequence., (*11)
2. BlackListedFile Filter:
This one is similar to the above but it fetches regex'es and string from provided folder.
Currently the folder is in src/Filter/blacklists. If you want to provide your own files, upon init you must declare the folder path:, (*12)
$config = array(
'dir' => '/path/to/your/folder'
);
$blackListedFile = new BlackListedFile($config);
Please DO NOT forget to add the index file which contains the filenames within the provided directory., (*13)
3. TooManyEmails Filter:
The name says it all. It matches the number of links in string. It's configurable easy like:, (*14)
$config = array(
'emailsAllowed' => 2
);
4. TooManyLinks Filter:
How many links we can allow in the string, (*15)
$config = array(
'linksAllowed' => 2,
'linksRatio' => 20 // Percentage of links to words ratio within the text
);
5. TooManyPhones Filter:
How many phone numbers we can allow., (*16)
$config = array(
'phonesAllowed' => 2
);
6. TooManyUppercase Filter:
How many uppercase words are allowed in string. Useful when someones enter the FREE FREE BLAH BLAH DISCOUNT OFF., (*17)
$config = array(
'wordsRatio' => 20 // Percentage of allowed uppercase words in a string
);
Creating your own custom Filter
You create a detector simply by creating a class that implements the FilterInterface
which defines the following contract., (*18)
interface FilterInterface
{
public function filter($data);
}
Your filter must return an array of:, (*19)
array(
'founded' => true, // or false if spam not found
'message' => 'message to return if spam found'
);
After creating your own filter, you add it using the registerFilter() method in the SpamMarker., (*20)
License
The MIT License (MIT). Please see LICENSE for more information., (*21)
Voila!, (*22)