<?php
$s0 = 'Α';
$s1 = 'А';
$s2 = 'A';
$s3 = 'a';
$s4 = 'а';
$err = null;
$sp = new \Spoofchecker();
$sp->setAllowedLocales('en_EN');
$sp->setChecks(\Spoofchecker::SINGLE_SCRIPT_CONFUSABLE | \Spoofchecker::MIXED_SCRIPT_CONFUSABLE | \Spoofchecker::WHOLE_SCRIPT_CONFUSABLE);
// non-unicode, but enough to differentiate
var_dump(ord($s0), ord($s1), ord($s2), ord($s3), ord($s4)); // 206, 208, 65, 97, 208
var_dump('Confusable 0-1: ' . $sp->areConfusable($s0, $s1, $err), 'Error: ' . $err); // no, 0
var_dump('Confusable 1-2: ' . $sp->areConfusable($s1, $s2, $err), 'Error: ' . $err); // no, 0
var_dump('Confusable 2-3: ' . $sp->areConfusable($s2, $s3, $err), 'Error: ' . $err); // no, 0
var_dump('Confusable 3-4: ' . $sp->areConfusable($s3, $s4, $err), 'Error: ' . $err); // yes, 6
var_dump('Suspicious #0: ' . $sp->isSuspicious($s0, $err), 'Error: ' . $err); // no, 0
var_dump('Suspicious #1: ' . $sp->isSuspicious($s1, $err), 'Error: ' . $err); // no, 0
var_dump('Suspicious #2: ' . $sp->isSuspicious($s2, $err), 'Error: ' . $err); // no, 0
var_dump('Suspicious #3: ' . $sp->isSuspicious($s3, $err), 'Error: ' . $err); // yes, 4
var_dump('Suspicious #4: ' . $sp->isSuspicious($s4, $err), 'Error: ' . $err); // yes, 4
preferences:
46.62 ms | 402 KiB | 5 Q