Caractères Unicode pouvant être utilisés pour piéger un trieur de chaînes?

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

  •  02-07-2019
  •  | 
  •  

Question

Etant donné qu’il manque à Unicode une série de caractères de tri de largeur nulle, je dois déterminer des caractères équivalents qui me permettront de forcer un certain ordre dans une liste triée automatiquement par valeurs de caractères. Malheureusement, les éléments de la liste ne sont pas classés par ordre alphabétique et il n'est pas non plus acceptable de les préfixer avec des caractères visibles afin de garantir que le résultat du tri correspond au résultat souhaité.

Quels caractères Unicode peuvent être placés devant le texte normal de l'alphabet latin, et n'apparaîtront pas, mais me permettent tout de même de "clouer" le genre de la façon dont j'ai besoin?

(En passant, cela se fait avec Drupal 5 avec un champ de liste de profils d’utilisateurs. Ne vous embêtez pas pour suggérer de changer cela en un vocabulaire / une catégorie.)

Était-ce utile?

La solution

L'espace sans largeur (U + 200B) devrait probablement faire ce que vous voulez. A partir de la spécification Unicode:

  

Zero Width Space. L'espace U + 200B ZERO WIDTH indique une possibilité de saut de ligne, sauf qu'il n'a pas de largeur. Les caractères d’espace zéro-largeur sont destinés à être utilisés dans les langues ne comportant pas d’espacement des mots visible représentant les opportunités de saut de ligne, telles que le thaï, le khmer et le japonais.

Devrait être dans la plupart des polices que vous rencontrez, mais YMMV.

Autres conseils

Personnellement, je préfère simplement utiliser une clé de tri primaire / secondaire. Il est moins simple et facile à implémenter dans une requête SQL typique (ORDER BY column_a, column_b). Modifié pour ajouter : en Php, vous pouvez utiliser usort (tableau, comparateurFonction) avec une fonction de comparaison personnalisée pour ajouter une logique supplémentaire de tri, si vous ne pouvez pas utiliser SQL pour fais le tour.

Toutefois, si vous ne pouvez utiliser qu'une colonne et que vous ne pouvez pas la corriger, préfixez-la avec un certain nombre de caractères improbables, tels que des traits de soulignement pour le tri, puis supprimez-les avant de les afficher. (en utilisant la substitution d'expressions rationnelles ou similaire).

Les hacks basés sur Unicode dépendent énormément des polices utilisées, de l'ordre de tri / classement des paramètres régionaux que vous utilisez, et peuvent produire des effets secondaires indésirables sur les clients sur lesquels vous n'avez pas le contrôle (différents navigateurs, différents oses, clients locaux). La plupart "non imprimable" les caractères génèrent le "caractère inconnu" lorsqu’ils sont affichés sur des systèmes sans support, ce qui ressemble généralement à un carré vide. Certains caractères de largeur nulle, tels que l’arabe, sont utilisés, mais ils ne devraient pas affecter le tri, sauf dans les applications avec prise en charge très perverse Unicode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top