質問

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

通常のラテンアルファベットテキストの前にスローできるUnicode文字は表示されませんが、それでも「スパイク」を許可します。必要な方法でソートしますか?

(これはユーザープロファイルリストフィールドを使用してDrupal 5で行われています。ボキャブラリー/カテゴリに変更することを提案しないでください。)

役に立ちましたか?

解決

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

  

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

実行するほとんどのフォントである必要がありますが、YMMV。

他のヒント

個人的に、私は主/副ソートキーを使用することを好みます。これはそれほど複雑ではなく、一般的なSQLクエリ(ORDER BY column_a、column_b)で簡単に実装できます。 追加して編集:Phpでは、 usort(array、comparisonFunction)をカスタム比較関数とともに使用して、SQLを使用できない場合は、並べ替えのロジックを追加できます。トリックをします。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top