我对网站上的某些输入运行正则表达式检查,但是当用户使用“花式” Unicode集(例如:
)时,正则表达式错误地返回false。Ⓜⓐⓣⓒⓗ Match ⒨⒜⒯⒞⒣
这些不是不同的字体,它们是不同的字符! /Match/
(Proof)都不匹配
在执行Regex检查之前,如何将用户输入转换为标准ABC字符? (如果使用的话,我正在使用PHP)
答案 0 :(得分:2)
NFKD Unicode normalisation应该处理大多数此类问题。但是,似乎只有启用intl
模块才有效,而且我的环境中没有该模块,因此无法对其进行测试。如果您也没有这样的PHP,并且不想安装它,那么这样做至少在某些字符上会做一些类似的事情:
iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text)
最后,您可以创建自己的映射,例如使用strtr
(由于您自己编写了映射,因此您将知道该映射起作用)。