今天的内容很简单,但也很有趣。不知道大家有没有经历过这样的事情,就是在有些字体中,0和O不好区分,1和l也很难看清楚。当然,现在大部分编辑器和IDE的默认字体都是选择那些比较好区分这些相似字符的,比如在0中间加一个斜线或者一个点。PHP中也有这样一个功能,可以帮助我们查看是否有这样难以区分的字符。相似字符检测$checker=newSpoofchecker();var_dump($checker->areConfusable('google.com','google1e.com'));//truevar_dump($checker->areConfusable('google.com','g00g1e.com'));//falseSpoofchecker类就是用来做这种检测类的,它的areConfusable()方法可以帮助我们检测两个字符串中是否存在相似的字符。比如我们第一个测试代码,l和1,如果不仔细看,可能真的会认错。第二段检测代码返回false,表示没有非常相似的字符,但是如果我们将第一个字符串中的小写o替换为大写O,这部分也返回true。你可以自己测试一下。可疑字符检测或者,我们可以使用Spoofchecker类的另一种方法来检测字符串中的可疑字符。var_dump($checker->isSuspicious('google.com'));//假var_dump($checker->isSuspicious('Рaypal.com'));//TRUE为什么Paypal.com返回true?哪里可疑?事实上,isSuspicious()检测字符串中的每个字符是否来自不同的Unicode字符。大写的P可能来自Cyrylic,即Unicode字符集,不一定是拉丁字符的P。当然,作为中国人,我们对这些知识知之甚少,除了专攻外语或者学过字母来源知识的朋友。由于不同地域语言中的效果是国际化的类和方法,如果我们修改地域语言,检测结果会不会不同?$checker->setAllowedLocales('zh_CN');var_dump($checker->areConfusable('google.com','google1e.com'));//truevar_dump($checker->areConfusable('google.com','g00g1e.com'));//错误var_dump($checker->isSuspicious('google.com'));//真var_dump($checker->isSuspicious('Рaypal.com'));//TRUE使用Spoofchecker的setAllowedLocales()方法可以为Spoofchecker的运行设置当前区域语言信息。设置为中文后,isSuspicious()返回的内容为TRUE。毕竟使用的字符集不同,不会使用默认的拉丁字符集。总结嗯,这篇文章真的只是为了好玩。在实际业务中,如果我们要做一些文章和代码校验的功能,或许areConfusable()可以为我们提供一些方便。试着抱着理解的态度去玩吧!测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/9。学习PHP中有趣的字符集国际化验证功能。PHP参考文档:https://www.php.net/manual/zh/class.spoofchecker.php各媒体平台均可搜索【硬核项目经理】
