如何在PHP中实现类似MySQL的latin1_general_ci排序规则?

时间:2009-06-19 01:12:34

标签: php sorting localization collation strcmp

我正在编写一个字符串比较函数来排序医学术语,这些术语通常包含来自许多不同欧洲语言的特殊重音字符,我需要以某种方式实现类似于MySQL latin1_general_ci的校对。

首先,我正在对字符串进行一些基本的修改,以删除空格,引号,连字符,括号等。当我使用默认语言环境将字符串传递给strcoll()时会出现问题,因为它是例如,没有足够的智慧来考虑一个重音e,因为它在字典上等同于普通的e。

我很想使用像德语或法语这样的语言环境,因为它可能不会包含我需要考虑的所有特殊字符。是否有一个区域设置会给我一些类似于latin1_general_ci排序规则的内容?或者是否有其他解决方案?

我天真的解决方案是创建一个大的关联数组,将重音字母映射到它们的常规字母等价物,然后将其与str_replace()一起使用,但这听起来既缓慢又乏味(而且容易出错)。如果可能的话,我宁愿使用语言中内置的东西。

同样在该注释中,strcmp()strcasecmp()是否尊重当前区域设置的排序规则,还是strcoll()只是这样做?

2 个答案:

答案 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的相关问题。