Yerel Sorunsuz olmadan PHP için evrensel Sıralama Fonksiyonu

2 Cevap php

Ben süre geri a very similar question bir sordu ve doğru PHP 5.3 + ve yeni gelişmeler ile biraz daha kolay UTF-8 karakter ile bir dizi sıralama merak ediyordum.

Çözüm benim önceki soru çalışmalarında sağlanan, ama evrensel bir çözüm arıyorum; Belirtilen yerele bağlı değildir biri - kind of what MySQL does with the UTF-8 collation.

Şimdiden teşekkürler!

2 Cevap

Kısa cevap: Eğer yerelin farkında olmak gerekiyor.

Yerel sıralama kuralları ile charset karıştırmayın. UTF-8 Unicode karakterleri kodlamak için sadece bir yolu şudur: Eğer sıralama, harf, vb nasıl idare hakkında hiçbir şey anlamına gelmez

Ben basit bir örnek koyacağım. İspanyolca dil iki alfabe vardır: Geleneksel ("ch" harf olarak kabul edilir burada) ve ("ch" iki harf nerede), modern. Geleneksel harmanlama Bu şekilde sıralamak:

  1. Barro
  2. Cuenco
  3. Çin
  4. Taban taşı

Modern harmanlama Eğer bu şekilde sıralamak istiyorum:

  1. Barro
  2. Çin
  3. Cuenco
  4. Taban taşı

Bu UTF-8 aynıdır, Latin1, Latin9, cp850 veya ne olursa olsun: kodlama alakalı değildir.

PHP yerel ile sorun onların iş parçacığı güvenli değildir olmasıdır. Apache dişli çalıştırırsanız tüm konuları etkiler, çünkü pratikte setlocale kullanamazsınız.

Now, I just found what looks like a solution: The Collator class in the Intl extension. It has methods for string comparison and sorting. Docs are here: http://php.net/manual/en/class.collator.php