6

Unicode には一連のゼロ幅の並べ替え文字がないため、文字値によって自動的に並べ替えられるリストで特定の順序を強制できる同等の文字を決定する必要があります。残念ながら、リスト項目はアルファベット順ではありません。また、並べ替えの結果が目的の結果と一致することを保証するために、目に見える文字をプレフィックスとして付けることもできません。

通常のラテン アルファベット テキストの前にスローでき、表示されないが、必要な方法で並べ替えを「スパイク」できる Unicode 文字は何ですか?

(ところで、これはユーザー プロファイル リスト フィールドを使用して Drupal 5 で行われています。語彙/カテゴリに変更することを気にしないでください。)

4

2 に答える 2

5

ゼロ幅のスペース (U+200B) はおそらくあなたが望むことをするはずです。Unicode 仕様から:

ゼロ幅スペース。U+200B ZERO WIDTH SPACE は、幅がないことを除いて、改行の機会を示します。幅ゼロのスペース文字は、タイ語、クメール語、日本語など、改行の機会を表す単語間隔が表示されない言語で使用することを目的としています。

あなたが遭遇するほとんどのフォントにあるはずですが、YMMV.

于 2008-09-30T19:50:41.690 に答える
1

個人的には、プライマリ/セカンダリ ソート キーを使用することを好みます。煩わしくなく、典型的な SQL クエリ (ORDER BY column_a,column_b) で簡単に実装できます。追加するために編集: Php では、usort(array, comparisonFunction)SQL を使用してトリックを実行できない場合は、カスタム比較関数を使用して並べ替え用のロジックを追加できます。

ただし、操作する列が 1 つしかなく、それが修正できない場合は、並べ替えのためにアンダースコアなどのありそうもない文字を特定の数だけプレフィックスとして付け、表示する直前にそれらを削除します。(正規表現の置換または類似のものを使用)。

Unicode ベースのハッキングは、使用されているフォント、使用しているロケールの照合/並べ替え順序に大きく依存し、制御できないクライアント (異なるブラウザー、異なる OS、異なるクライアント ロケール) で望ましくない副作用を引き起こす可能性があります。 . ほとんどの「印刷できない」文字は、サポートされていないシステムで表示されると「不明な文字」になり、通常は空の四角のように見えます。アラビア語などの言語で使用されるゼロ幅文字がいくつかありますが、非常にひねくれた Unicode サポートを備えたアプリケーションを除いて、並べ替えに影響を与えるべきではありません。

于 2008-09-30T05:58:50.287 に答える