3v4l.org

run code in 300+ PHP versions simultaneously
<?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