Caracteres Unicode que podem ser usados ??para enganar um classificador de corda?

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

  •  02-07-2019
  •  | 
  •  

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.)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top