¿Caracteres Unicode que se pueden usar para engañar a un clasificador de cadenas?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Dado que Unicode carece de una serie de caracteres de clasificación de ancho cero, necesito determinar caracteres equivalentes que me permitan forzar un cierto orden en una lista que se ordena automáticamente por valores de caracteres. Lamentablemente, los elementos de la lista no están en orden alfabético, ni es aceptable ponerles un prefijo con caracteres visibles para garantizar que el resultado de la clasificación coincida con el resultado deseado.

Qué caracteres Unicode pueden aparecer delante del texto normal del alfabeto latino, y no aparecerán, pero aún así me permiten "pinchar" el tipo en la forma que requiero?

(Por cierto, esto se está haciendo con Drupal 5 con un campo de lista de perfil de usuario. No se moleste en sugerir cambiar eso a un vocabulario / categoría).

¿Fue útil?

Solución

El espacio de ancho cero (U + 200B) probablemente debería hacer lo que quieras. De la especificación Unicode:

  

Espacio de ancho cero. El ESPACIO ANCHO CERO U + 200B indica una oportunidad de salto de línea, excepto que no tiene ancho. Los caracteres de espacio de ancho cero están destinados a usarse en idiomas que no tienen un espacio visible entre palabras para representar oportunidades de salto de línea, como el tailandés, el jemer y el japonés.

Debería estar en la mayoría de las fuentes con las que te encuentras, pero YMMV.

Otros consejos

Personalmente, prefiero usar una clave de clasificación primaria / secundaria. Es menos complejo y fácil de implementar en una consulta SQL típica (ORDER BY column_a, column_b). Editado para agregar : en Php, puede usar usort (array, compareFunction) con una función de comparación personalizada para agregar lógica adicional para ordenar, si no puede usar SQL para haz el truco.

Sin embargo, si solo tiene una columna para trabajar y eso no se puede arreglar, solo prefije con un cierto número de caracteres poco probables, como guiones bajos para ordenar, luego elimínelos justo antes de mostrarlos. (usando la sustitución regexp o similar).

Los hacks basados ??en Unicode dependerán en gran medida de las fuentes que se utilicen, el orden de clasificación / clasificación local que esté utilizando y pueden producir efectos secundarios no deseados en clientes sobre los que no tiene control (diferentes navegadores, diferentes oses, diferentes clientes locales). La mayoría "no imprimible" los caracteres producen el "carácter desconocido" cuando se muestra en sistemas sin soporte para ellos, que generalmente se ve como un cuadrado vacío. Hay algunos caracteres de ancho cero utilizados para idiomas como el árabe, pero no deberían afectar la ordenación, excepto en aplicaciones con soporte Unicode muy perverso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top