Символы Юникода, которые можно использовать для обмана сортировщика строк?

StackOverflow https://stackoverflow.com/questions/151844

  •  02-07-2019
  •  | 
  •  

Вопрос

Поскольку в Юникоде отсутствует ряд символов сортировки нулевой ширины, мне нужно определить эквивалентные символы, которые позволят мне принудительно установить определенный порядок в списке, который автоматически сортируется по значениям символов.К сожалению, элементы списка расположены не в алфавитном порядке, и недопустимо добавлять к ним видимые символы, чтобы результат сортировки соответствовал желаемому результату.

Какие символы Юникода можно добавить перед обычным текстом латинского алфавита и они не будут отображаться, но при этом позволят мне «улучшить» сортировку так, как мне нужно?

(Кстати, это делается в Drupal 5 с полем списка профилей пользователей.Не утруждайтесь предложением изменить это на словарь/категорию.)

Это было полезно?

Решение

Пространство нулевой ширины (U+200B), вероятно, должно делать то, что вы хотите.Из спецификации Unicode:

Пространство нулевой ширины.U+200B ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ указывает на возможность разрыва строки, за исключением того, что она не имеет ширины.Пробелы нулевой ширины предназначены для использования в языках, в которых нет видимых межсловных интервалов для обозначения возможностей разрыва строки, таких как тайский, кхмерский и японский.

Должно быть в большинстве шрифтов, с которыми вы сталкиваетесь, но YMMV.

Другие советы

Лично я предпочитаю использовать первичный/вторичный ключ сортировки.Это менее громоздко и легко реализовать в типичном запросе sql (ORDER BY columns_a,column_b). Отредактировано, чтобы добавить:В Php вы можете использовать usort(array, comparisonFunction) с настраиваемой функцией сравнения, позволяющей добавить дополнительную логику сортировки, если вы не можете использовать SQL для достижения этой цели.

Однако, если у вас есть только один столбец для работы, и это невозможно исправить, просто добавьте в начало определенное количество маловероятных символов, таких как символы подчеркивания, для сортировки, а затем удалите их непосредственно перед отображением.(с использованием замены регулярного выражения или чего-то подобного).

Хаки на основе Unicode будут сильно зависеть от того, какие шрифты используются, какой языковой стандарт вы используете, и могут вызывать нежелательные побочные эффекты на клиентах, над которыми вы не имеете контроля (разные браузеры, разные операционные системы, разные языковые стандарты клиента). .Большинство «непечатаемых» символов при отображении в системах без их поддержки дают «неизвестный символ», который обычно выглядит как пустой квадрат.В таких языках, как арабский, используются символы нулевой ширины, но они не должны влиять на сортировку, за исключением приложений с очень извращенной поддержкой Unicode.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top