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