PHP ile Türkçe Karakterleri Büyük/Küçük Harfe Çevirmek
Bildiğiniz 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üğünüz 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ı deneyebiliriz.
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ı nasıl dönüştürdüğünü ve küçük i'yi hala büyük I olarak çevirdiğini fark ettiniz mi?
Evet, ne 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üğünüz gibi, 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çe 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.
echo Transliterator::create('Any-Latin; Latin-ASCII')->transliterate('سلمون عليكم'); // slmwn ʿlykm
Bir başka örnekte yunancadan gelsin.
echo Transliterator::create('Any-Latin; Latin-ASCII')->transliterate('Ελλάδα'); // Ellada
Evet, sınıfla ilgili daha fazla merak ettiğiniz bir şey olursa, aşağıdaki bağlantıya bir gözatın.
https://www.php.net/manual/en/class.transliterator.php