Caracteres Unicode que podem ser usados ??para enganar um classificador de corda?
Pergunta
Desde Unicode carece de uma série de zero, largura de caracteres de classificação, eu preciso determinar caracteres equivalentes que permitam-me para forçar uma certa ordem em uma lista que é automaticamente classificado por valores de caracteres. Infelizmente os itens da lista não estão em ordem alfabética, nem é aceitável para prefixar-los com caracteres visíveis para garantir o resultado do tipo corresponde ao resultado queria.
caracteres O Unicode pode ser jogado na frente do texto alfabeto latino regular, e não aparece, mas ainda me permitir "pico" do tipo da maneira que eu preciso?
(BTW isso está sendo feito com Drupal 5 com um campo de usuário lista de perfis. Não se preocupe sugerindo mudar isso para um vocabulário / categoria.)
Solução
espaço de largura zero (U + 200B) provavelmente deve fazer o que quiser. A partir do Unicode spec:
Zero Largura Espaço. O U + 200B ZERO LARGURA DO ESPAÇO indica uma quebra de linha oportunidade, exceto que ele não tem largura. caracteres de espaço de largura zero se destinam a ser utilizados em idiomas que não têm nenhuma palavra visível espaçamento para representar oportunidades de quebra de linha, como o tailandês, khmer, e japonês.
Deve ser na maioria dos tipos de letra você tiver, mas YMMV.
Outras dicas
Pessoalmente, eu prefiro usar uma chave tipo primário / secundário. É menos kludgy, e fácil de implementar em uma consulta SQL típica (ORDER BY column_a, column_b). editado para adicionar :. Php, você poderia usar usort(array, comparisonFunction)
com uma função de comparação personalizada para adicionar lógica adicional para a classificação, se você não pode usar SQL para fazer o truque
No entanto, se você só tem uma coluna para o trabalho com e isso é unfixable, apenas prefixo com um certo número de personagens improváveis ??como sublinhados para separação, em seguida, tira-los pouco antes de exibi-los. (Utilizando a substituição de expressão regular ou semelhante).
Unicode baseada em hacks dependerá pesadamente em fontes que são usadas, o que de locale agrupamento / classificação ordem que você está usando, e pode produzir efeitos secundários indesejáveis ??sobre os clientes que você não tem controle sobre (diferentes navegadores, sistemas operacionais diferentes, diferentes locales cliente). A maioria dos personagens "não imprimíveis" produzir o "caráter desconhecido" quando exibido em sistemas sem suporte para eles, que normalmente se parece com um quadrado vazio. Há alguns caracteres de largura zero usados ??para idiomas como o árabe, mas não deve afetar a classificação, exceto em aplicações com muito perversa Unicode apoio.