我正在编写一个字符串比较函数来排序医学术语,这些术语通常包含来自许多不同欧洲语言的特殊重音字符,我需要以某种方式实现类似于MySQL latin1_general_ci
的校对。
首先,我正在对字符串进行一些基本的修改,以删除空格,引号,连字符,括号等。当我使用默认语言环境将字符串传递给strcoll()
时会出现问题,因为它是例如,没有足够的智慧来考虑一个重音e,因为它在字典上等同于普通的e。
我很想使用像德语或法语这样的语言环境,因为它可能不会包含我需要考虑的所有特殊字符。是否有一个区域设置会给我一些类似于latin1_general_ci
排序规则的内容?或者是否有其他解决方案?
我天真的解决方案是创建一个大的关联数组,将重音字母映射到它们的常规字母等价物,然后将其与str_replace()
一起使用,但这听起来既缓慢又乏味(而且容易出错)。如果可能的话,我宁愿使用语言中内置的东西。
同样在该注释中,strcmp()
或strcasecmp()
是否尊重当前区域设置的排序规则,还是strcoll()
只是这样做?
答案 0 :(得分:1)
也许这个:
setlocale(LC_COLLATE, 'fr_FR.Latin1', 'fr.Latin1', 'fr_FR.Latin-1', 'fr.Latin-1');
strcmp()
和strcasecmp()
未本地化。
答案 1 :(得分:0)
您还可以尝试iconv函数来帮助规范化字符串。这将处理正常情况下的重音。请参阅有关sorting utf8 strings的相关问题。