Personaggi Unicode che possono essere usati per ingannare un selezionatore di stringhe?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Poiché in Unicode mancano una serie di caratteri di ordinamento a larghezza zero, è necessario determinare caratteri equivalenti che mi consentano di forzare un determinato ordine in un elenco che viene automaticamente ordinato in base ai valori dei caratteri. Sfortunatamente le voci dell'elenco non sono in ordine alfabetico, né è accettabile aggiungere un prefisso con caratteri visibili per garantire che il risultato dell'ordinamento corrisponda al risultato desiderato.

Quali caratteri Unicode possono essere lanciati davanti al normale testo in alfabeto latino e non verranno visualizzati, ma mi permettono comunque di "spike". il tipo nel modo in cui ho bisogno?

(A proposito questo è stato fatto con Drupal 5 con un campo elenco profili utente. Non preoccuparti di suggerire di cambiarlo in un vocabolario / categoria.)

È stato utile?

Soluzione

Lo spazio a larghezza zero (U + 200B) dovrebbe probabilmente fare quello che vuoi. Dalle specifiche Unicode:

  

Spazio a larghezza zero. U + 200B ZERO WIDTH SPACE indica un'opportunità di interruzione di riga, tranne per il fatto che non ha larghezza. I caratteri dello spazio di larghezza zero devono essere utilizzati in lingue che non hanno una spaziatura di parole visibile per rappresentare opportunità di interruzione di riga, come tailandese, khmer e giapponese.

Dovrebbe essere nella maggior parte dei caratteri in cui ti imbatti, ma YMMV.

Altri suggerimenti

Personalmente, preferisco solo usare una chiave di ordinamento primaria / secondaria. È meno kludgy e facile da implementare in una query sql tipica (ORDER BY column_a, column_b). Modificato per aggiungere : in Php, puoi utilizzare usort (array, compareFunction) con una funzione di confronto personalizzata per aggiungere ulteriore logica per l'ordinamento, se non puoi usare SQL per fai il trucco.

Tuttavia, se hai solo una colonna con cui lavorare e questo non è riparabile, aggiungi un prefisso con un certo numero di caratteri improbabili come caratteri di sottolineatura per l'ordinamento, quindi rimuovili prima di visualizzarli. (usando la sostituzione regexp o simile).

Gli hack basati su Unicode dipenderanno fortemente dal tipo di carattere utilizzato, dall'ordinamento / ordinamento delle impostazioni locali che stai utilizzando e potrebbero produrre effetti collaterali indesiderati su client su cui non hai il controllo (browser diversi, osi diversi, diversi client locali). La maggior parte "non stampabile" i caratteri generano il "carattere sconosciuto" quando viene visualizzato su sistemi senza supporto per loro, che di solito sembra un quadrato vuoto. Esistono alcuni caratteri di larghezza zero utilizzati per lingue come l'arabo, ma non dovrebbero influire sull'ordinamento se non nelle applicazioni con supporto Unicode molto perverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top