我正在编写一个字符串比较函数来对医学术语进行排序,这些术语通常包含来自许多不同欧洲语言的特殊重音字符,我需要以某种方式实现类似于 MySQL 的排序规则latin1_general_ci
。
首先,我正在对字符串进行一些基本的修改以删除空格、引号、连字符、括号等。当我将字符串传递给strcoll()
使用默认语言环境时,问题就出现了,因为它不够聪明,无法考虑,例如, 一个重音的 e 在字典上等同于一个正常的 e。
我对使用德语或法语等语言环境持谨慎态度,因为它可能不会包含我需要考虑的所有特殊字符。是否有一个语言环境可以给我类似于latin1_general_ci
排序规则的东西?或者是否有其他解决方案?
我天真的解决方案是创建一个大的关联数组来将重音字母映射到它们的常规字母等价物,然后将它与 一起使用str_replace()
,但这听起来很慢而且很乏味(而且容易出错)。如果可能的话,我宁愿使用语言内置的东西。
同样在这一点上,是否strcmp()
或strcasecmp()
尊重当前语言环境的排序规则,或者只是strcoll()
这样做?