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;
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.
Çanakkale'de işe yaradı, ama büyük İstanbul 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ı.
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 orijinalliği bozulmuyor. Bu sadece Türkçe için de geçerli değil, standart dışı tüm diller için geçerli.
Örneğin Rusça Moskova anlamına gelen Москва́ ifadesini nasıl çevirebiliriz bir bakalım.
Bir başka örnekte Arapça'dan gelsin. selamun aleyküm anlamına gelen سلمون عليكم ifadesini okunabilir kılalım.
Bir başka örnekte Yunanca'dan gelsin.
Evet, sınıfla ilgili daha fazla merak ettiğiniz bir şey olursa, aşağıdaki bağlantıya bir gözatın.
Konu, ProTurk üzerinden alıntıdır.
Ancak ne yazık ki, bu kullanım türkçe karakterlerin bazılarında sorun çıkarıyor. Örneklerle incelemek gerekirse;
PHP:
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.
PHP:
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 İstanbul 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ı.
PHP:
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 orijinalliği bozulmuyor. Bu sadece Türkçe için de geçerli değil, standart dışı tüm diller için geçerli.
Örneğin Rusça Moskova anlamına gelen Москва́ ifadesini nasıl çevirebiliriz bir bakalım.
PHP:
echo Transliterator::create('Any-Latin; Latin-ASCII')->transliterate('Москва́'); // Moskva
Bir başka örnekte Arapça'dan gelsin. selamun aleyküm anlamına gelen سلمون عليكم ifadesini okunabilir kılalım.
PHP:
echo Transliterator::create('Any-Latin; Latin-ASCII')->transliterate('سلمون عليكم'); // slmwn ʿlykm
Bir başka örnekte Yunanca'dan gelsin.
PHP:
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.
Konu, ProTurk üzerinden alıntıdır.