alexa  Menu
Alfabetik sıralamada türkçe karakter sorunu

Alfabetik sıralamada türkçe karakter sorunu

  20.03.2016 ,   yorum yapılmadı ,   7.360 kez okundu.

Hem istek üzerine hem de faydalı olabileceğini düşündüğüm için alfabetik sıralama yaparken türkçe karakterlere göre düzgün sonuç elde edilmesi için neler yapmamız gerektiğini anlatmak istedim.

Açıkcası daha önce kullanmadım bu yöntemi. Fakat istek üzerine ben de merak ettim. Küçük bir araştırma yaptım ve sonuç olumlu oldu. Şöyle ki, bu işlemi yapmak için lokasyonu belirtmemiz ve ona göre sıralama yapmamız gerekiyor. Bunun için kullanacağımız fonksiyon setlocale fonksiyonu.

Fonksiyonu kullanarak localhost üzerinde deneme yaptım ama sonuç olumsuzdu. Biraz araştırınca fonksiyonun php sürümlerine göre değişik sonuçlar çıkardığını öğrenmiş oldum.

Fonksiyonun kullanım şekli şöyle:

string setlocale ( int $sınıf , array $yerel )

Şimdi gelelim bizim yazacağımız koda. Önce setlocale fonksiyonunu kullanmadan sonucun nasıl gözüktüğüne bakalım:

header('Content-Type: text/html; charset=utf-8');
$array= array('R','Ş','S','G','U','Ç','İ','T','D','E','J','F','K','V','Y','Z','Ü','P','Ö','O','N','M','L','I','H','Ğ','C','B','A','W','Q');
sort($array,SORT_LOCALE_STRING);
foreach($array as $value)
{
	echo $value.'-';
}
Sonuç: A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-Y-Z-Ç-Ö-Ü-Ğ-İ-Ş

Şimdi bir de setlocale fonksiyonunu kullanarak bakalım:

header('Content-Type: text/html; charset=utf-8');
setlocale(LC_ALL, 'tr_TR.UTF-8', 'tr_TR', 'tr', 'turkish');
$array= array('R','Ş','S','G','U','Ç','İ','T','D','E','J','F','K','V','Y','Z','Ü','P','Ö','O','N','M','L','I','H','Ğ','C','B','A','W','Q');
sort($array,SORT_LOCALE_STRING);
foreach($array as $value)
{
	echo $value.'-';
}
Sonuç: A-B-C-Ç-D-E-F-G-Ğ-H-I-İ-J-K-L-M-N-O-Ö-P-Q-R-S-Ş-T-U-Ü-V-W-Y-Z

Gördüğünüz gibi sonuç ortada. Açıklamak gerekirse, ilk satırda sadece sayfamızda türkçe karakter sorunu yaşanmasın diye charset ekledik.

Asıl işlemiiz ikinci satırda yer alıyor.

  • setlocale fonksiyonunu kullandık ve ilk bölemde LC_ALL diyerek aşağıdakilerin hepsini etkile demiş olduk yani sıralama fonksiyonu dışında bazı fonksiyonları da etkile dedik.
  • İkinci bölümde yerel yani lokasyonu bildirmek için Türkçeye aid değerleri girdik. Dediğim gibi php sürümlerine göre değişiklik olabilir ve bu kısmı bu kadar uzun değil aşağıdaki gibi de kullanabilirsiniz:
setlocale(LC_ALL,'TURKISH');

Daha sonra array (dizi) belirledik ve ardından sort() fonksiyonunu kullandık.

Bu şekilde türkçe karakter sıralama sorununu da aşmış olacaksınız.

Kaynak: setlocale

 

Yorum yapın..

isim yerine gerçek isim ve soyisim yazılmadan yapılan yorumlar kesinlikle onaylanmıyor bilginiz olsun.


The reCAPTCHA verification period has expired. Please reload the page.