有没有人有想法检测字符串的Unicode范围的最快方法是在PHP中?我认为在PHP中会有这样做,但我找不到任何东西。理想情况下,我想要的是一个函数,会说,'约翰琼斯'的100%是拉丁语或'琼斯језик'是50%拉丁文和50%西里尔文。
你可以用类似下面的ReEx做到这一点:
strA = 'John Jones';
$strB = 'Српски језик';
$strC = 'Հայաստանի Հանրապետություն';
preg_match('~[\p{Cyrillic}\p{Common}]+~u', $strB, $res);
但这就需要检查,对每个范围,这似乎不是一个好主意。或者,你可以得到每个角色的unicode值,并检查它所在的范围。但我想可能有人已经做出了这样的事情。
编辑
要查看关于为什么这可能是有用的多一点的想法,在评论中指出,有些人有时会混在视觉上相同的拉丁和西里尔字母。例如这是克罗地亚搜索用西里尔字母“С”,其余的拉丁文:
https://www.google.am/search?q=%22%D0%A1roatia%22&aq=f&oq=%22%D0%A1roatia%22
搜索再次与全拉丁美洲,你会得到关于亿的结果,而不是20,000。在这种情况下,最好在文本的上下文中适当地替换字符。一个很好的例子表明,这种检测的有用之处在于使用西里尔字母来绕过亵渎过滤器的人。
你试图解决什么问题,使你认为你需要知道哪个百分比的字符来自哪个unicode脚本块?例如,知道80%的字符来自拉丁文,20%来自拉丁文扩展A不会告诉你它是罗马尼亚语还是越南语。 –
嗨, 我有一张人名表。其中有些是非拉丁字符,有些是混合的。我需要检测哪些是哪一个,像西里尔文那样的许多字母可以被音译,但是其他的如阿拉伯文不能,或者至少没有意义。此外,对于来自东欧,俄罗斯等国家的人来说,他们有时会使用与西班牙语字符完全相同的西里尔文字符,反之亦然,从而导致混合字符串。我将所有名称都转换为拉丁文,并且我需要上述数据,因此我可以知道如何将每个名称转换为拉丁文。 –
为什么?只需存储UTF8而不转换为拉丁文。 2013年,几乎所有常见技术都支持它。 –