php

PHP ile Türkçe Karakterleri Büyük/Küçük Harfe Çevirmek (Transliterator kullanımı )

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.

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

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.