2008-09-30 6 views
3

유니 코드에는 일련의 제로 너비 정렬 문자가 없으므로 문자 값으로 자동 정렬되는 목록에서 특정 순서를 강제로 지정할 수있는 동일한 문자를 결정해야합니다. 불행히도 목록 항목은 알파벳 순서가 아니며 표시 결과에 일치하는 결과가 표시되도록 보이는 문자로 접두사를 붙이는 것도 용납 할 수 없습니다. 일반 라틴 알파벳 텍스트 앞에 던져 수 있으며, 표시되지 않습니다,하지만 여전히 수 있도록 유니 코드 문자는 무엇유니 코드 문자 분류기를 속이는 데 사용할 수있는 문자는 무엇입니까?

나 "스파이크"내가 필요로하는 방식으로 정렬에?

은 (BTW이 사용자 프로파일 목록 필드와 드루팔 (5)으로 수행되고있다. 어휘/카테고리에 그 변경 제안 귀찮게하지 마십시오.)

답변

4

제로 폭 공간 (U + 200B)는 아마 당신이 원하는 일을해야한다.

제로 폭 공간 : 유니 코드 사양에서. U + 200B ZERO WIDTH SPACE는 너비가 없음을 제외하고 줄 바꿈 기회를 나타냅니다. 영 - 너비 공백 문자는 태국어, 크메르어 및 일본어와 같이 줄 바꿈 기회를 나타낼 수있는 단어 간격이없는 언어에서 사용하기위한 것입니다.

당신이 만나는 글꼴은 대부분 YMMV가되어야합니다.

+0

나는 한 문자 이상을 필요로한다. 결국, 나는 이것을 일련의 문자열을 정렬하는 방법으로 사용하고있다. 너비가 0 인 ftw가 아닌 ​​공백이 아닌 문자. –

1

개인적으로, 난 그냥 기본/보조 정렬을 사용하는 것을 선호 키. 그것은 덜 kludgy, 일반적인 SQL 쿼리 (ORDER BY column_a, column_b)에서 구현하기 쉽습니다. 편집 를 추가합니다 : 당신이 트릭을 할 SQL을 사용할 수없는 경우 PHP에서, 당신은 정렬에 추가 로직을 추가 할 사용자 정의 비교 함수로 usort(array, comparisonFunction)를 사용할 수 있습니다.

그러나 작업 할 열이 하나 뿐이며 수정할 수없는 경우 정렬을 위해 밑줄과 같은 특정 수의 접두어를 붙이지 말고 표시하기 바로 전에 제거하십시오. (regexp 치환 등을 사용).

유니 코드 기반 해킹은 사용되는 글꼴, 사용중인 로케일/정렬 순서에 크게 의존하며 제어 할 수없는 클라이언트 (다른 ​​브라우저, 다른 oses, 다른 클라이언트 로케일). 대부분의 "인쇄 할 수없는"문자는 지원하지 않는 시스템에 표시 될 때 "알 수없는 문자"를 생성합니다. 일반적으로 빈 사각형처럼 보입니다. 아랍어와 같은 언어에 사용되는 너비가없는 문자가 일부 있지만 매우 비뚤어진 유니 코드 지원이있는 응용 프로그램을 제외하고는 정렬에 영향을 미치지 않아야합니다.

+0

PHP의 유니 코드 처리는 그런 종류의 매우 잘못된 것입니까? BTW SQL 물건이 상황에서 전혀 도움이되지 않습니다. –

+0

PHP에서 Shift-Jis, EUC-JP 또는 ISO-8859-1 만 사용했기 때문에 확실하지 않습니다. 유니 코드가 ASCII/Iso-8859-1보다 더 이상이 문제를 해결하지 못합니다. 그것은 인코딩의 도메인이 아닙니다. 그러나 _MyVal, __MyVal 및 ___MyVal은 다르게 정렬됩니다. – JasonTrue

+0

PHP의 일반적인 정렬은 PHP6에서 로케일 플래그 이외의 많은 것을 제공합니다. 그러나 자신의 비교 함수를 구현하면 usort를 사용하고 원하는 비교 규칙을 사용할 수 있습니다. – JasonTrue