美文网首页
学习PHP中有趣的字符集国际化验证功能

学习PHP中有趣的字符集国际化验证功能

作者: ZyBlog | 来源:发表于2021-08-16 08:53 被阅读0次

今天的内容非常简单,不过也很有趣。不知道大家有没有经历过这样的事情,就是在某些字体下,0 和 O 不好区分,1 和 l 也是很难看清楚。当然,现在大部分的编辑器和 IDE 的默认字体都是会选择那些比较好区分这些相似字符的,比如给 0 中间加上个斜杠或者一个点之类的。在 PHP 中也有这样的函数能够帮助我们来检查是否有这样的不好区分的字符存在。

类似字符检测

$checker = new Spoofchecker();

var_dump($checker->areConfusable('google.com', 'goog1e.com')); // true

var_dump($checker->areConfusable('google.com', 'g00g1e.com')); // false

Spoofchecker 类就是用来进行这类检测的类,它的 areConfusable() 方法就能够帮助我们检测两个字符串中是否有相似的字符。比如我们第一个测试代码中,l 和 1 ,如果不仔细看还真有可能认错。第二段检测代码返回的 false ,说明不存在非常相似的字符,但如果我们将第一个字符串中的小写的 o 换成大写的 O 的话,这段也会返回 true 。大家可以自己测试一下。

可疑字符检测

另外,我们可以使用 Spoofchecker 类的另一个方法来检测字符串中是否有可疑的字符。

var_dump($checker->isSuspicious('google.com')); // FALSE

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', 'goog1e.com')); // true

var_dump($checker->areConfusable('google.com', 'g00g1e.com')); // false

var_dump($checker->isSuspicious('google.com')); // TRUE

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

相关文章

  • 学习PHP中有趣的字符集国际化验证功能

    今天的内容非常简单,不过也很有趣。不知道大家有没有经历过这样的事情,就是在某些字体下,0 和 O 不好区分,1 和...

  • PHP中的一些验证:

    PHP中的一些验证:验证是不是手机号: 验证是不是固话: php中判断这个手机号是否是正确的: php中判断是不是数字:

  • PHP GD库绘制验证码

    PHP GD库绘制简单验证码 程序代码: 功能截图:

  • 2019-03-01

    完成了验证码功能,通过php的image相关函数生成验证码,通过$_SESSION['authcode']来进行全...

  • PHP生成图形化验证码

    参考 PHP 代码 html中调用 js中实现点击切换验证码 php中进行校验(从session中取验证码显示的数...

  • thinkphp3.2 图片验证码教程

    thinkphp框架自带了验证码的功能,利用手册可以轻松做出图片验证码html php 生成的验证码信息会保存到s...

  • php邮件

    今天的理论学习中,学会了php邮件程序。php邮件程序支持SMTP验证,并可以发送给多个指定收件人,并且支持附件,...

  • php中iconv报错问题

    在php中iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库;但有时候iconv对于部...

  • php7安装intl扩展

    环境 php 版本:php7.0.8 IP:192.168.1.99 PHP intl 是国际化扩展,是ICU 库...

  • php代码审计之安装问题审计(特点功能定向法)

    一般php程序都有一个初始安装的功能,那么这个安装功能可能会有哪些漏洞呢。 无验证功能,任意重装覆盖 $_GET[...

网友评论

      本文标题:学习PHP中有趣的字符集国际化验证功能

      本文链接:https://www.haomeiwen.com/subject/jxcmbltx.html