6

由于 Unicode 缺少一系列零宽度排序字符,因此我需要确定等效字符,以便我可以在按字符值自动排序的列表上强制执行特定顺序。不幸的是,列表项不是按字母顺序排列的,也不可以在它们前面加上可见字符以确保排序结果与想要的结果相匹配。

哪些 Unicode 字符可以放在常规拉丁字母文本前面,并且不会出现,但仍然允许我以我需要的方式“尖峰”排序?

(顺便说一句,这是使用带有用户配置文件列表字段的 Drupal 5 完成的。不要费心建议将其更改为词汇/类别。)

4

2 回答 2

5

零宽度空间 (U+200B) 应该可以满足您的需求。从 Unicode 规范:

零宽度空间。U+200B ZERO WIDTH SPACE 表示换行机会,除了它没有宽度。零宽度空格字符旨在用于没有可见字间距以表示换行机会的语言,例如泰语、高棉语和日语。

应该是您遇到的大多数字体,但 YMMV.

于 2008-09-30T19:50:41.690 回答
1

就个人而言,我只是更喜欢使用主/次排序键。它不那么笨拙,并且易于在典型的 sql 查询中实现(ORDER BY column_a,column_b)。编辑添加:在 PHP 中usort(array, comparisonFunction),如果您不能使用 SQL 来解决问题,您可以使用自定义比较函数来添加额外的排序逻辑。

但是,如果您只有一列可以使用并且无法修复,则只需使用一定数量的不太可能的字符(如下划线)作为前缀进行排序,然后在显示它们之前将它们剥离。(使用正则表达式替换或类似的)。

基于 Unicode 的 hack 将在很大程度上取决于使用的字体、您使用的区域设置的排序/排序顺序,并且可能会对您无法控制的客户端产生不良副作用(不同的浏览器、不同的操作系统、不同的客户端区域设置) . 大多数“不可打印”字符在不支持它们的系统上显示时会产生“未知字符”,通常看起来像一个空方块。有一些零宽度字符用于阿拉伯语等语言,但它们不应该影响排序,除非在具有非常不正当的 Unicode 支持的应用程序中。

于 2008-09-30T05:58:50.287 回答