Bildiği gibi, PHP’de yazıları büyük-küçük harfe çevirmek için
strtolower()
ve strtoupper()
kullanılıyor.
Ancak ne yazık ki, bu kullanım türkçe karakterlerin bazılarında sorun çıkarıyor.
Örneklerle incelemek gerekirse;
echo strtolower('ÇANAKKALE'); // Çanakkale echo strtolower('İSTANBUL'); // İstanbul echo strtoupper('istanbul'); // ISTANBUL echo ucwords('istanbul çok güzel bir şehir'); // Istanbul çok Güzel Bir şehir
Gördüğü gibi, büyük i harfini küçültmüyor, aynı şekilde küçük i harfini büyük ı olarak büyütüyor.
Alternatif olarak multibyte fonksiyonları kullanmayı deneyelim.
echo mb_strtolower('ÇANAKKALE', 'UTF-8'); // çanakkale echo mb_strtolower('İSTANBUL', 'UTF-8'); // i̇stanbul echo mb_strtoupper('istanbul', 'UTF-8'); // ISTANBUL echo mb_convert_case('istanbul çok güzel bir şehir', MB_CASE_TITLE, "UTF-8"); // Istanbul Çok Güzel Bir Şehir
Çanakkale’de işe yaradı, ama büyük istanbul yazısının i harfini büyük I olarak çevirdi ve yazık ki bu çözümde işimize yaramadı.
Deneyeceğimiz son şey ise çok fazla bilinmeyen Transliterator
sınıfı.
echo Transliterator::create('tr-upper')->transliterate('istanbul'); // İSTANBUL echo Transliterator::create('tr-lower')->transliterate('İSTANBUL'); // istanbul echo Transliterator::create('tr-title')->transliterate('istanbul çok güzel bir şehir'); // İstanbul Çok Güzel Bir Şehir
Evet gördüğü gibi, bu sınıf işimizi çözdü. Bu sınıf her bir karakteri ASCII’ye dönüştürüyor böylece orjinalliği bozulmuyor. Bu sadece türkçe içinde geçerli değil, standart dışı tüm diller içinde geçerli.
Örneğin rusça moskova
anlamına gelen Москва́
ifadesini nasıl çevirebiliriz bir bakalım.
echo Transliterator::create('Any-Latin; Latin-ASCII')->transliterate('Москва́'); // Moskva
Bir başka örnekte arapçadan gelsin. selamun aleyküm
anlamına gelen سلمون عليكم
ifadesini okunabilir kılalım.
Bir başka örnekte yunancadan gelsin.
sınıfla ilgili daha fazla bilgi için https://www.php.net/manual/en/class.transliterator.php
Önemli NOT : Sınıfı kullanabilmek için php.ini dosyası içerisinde bulunan “;extension=intl” satırının başındaki “;” silinerek eklentinin aktif hale getirilmesi gerekiyor.