PHP UTF8 de Ucwords gibi bu tür çevirilerde yalnızca i -> İ dönüşümünde problem yaşanmaktadır, tabii ikisi de I’dan ı’ya ve i’den İ’ye. Bunu çözmek için aşağıdaki fonksiyonu kullanabilirsiniz.
function ilkBuyuk($str){
return ltrim(mb_convert_case(str_replace('i', 'İ',$str), MB_CASE_TITLE, 'UTF-8'));
}
Veya daha güzeli:
/* Türkçe Destekli İlk Harf Büyük Diğerleri Küçük */
function ilkBuyukTR($str){
return ltrim(mb_convert_case(str_replace('i', 'İ',mb_strtolower($str)), MB_CASE_TITLE, 'UTF-8'));
}
İkincisi öncelikle metnin tümünü küçültüyor.
Ve en iyisi:
/* Türkçe Destekli İlk Harf Büyük Diğerleri Küçük Final */
function ucwords_tr($str){
return ltrim(mb_convert_case(str_replace(array('i','I'), array('İ','ı'),mb_strtolower($str)), MB_CASE_TITLE, 'UTF-8'));
}
Kaynak: https://www.php.net/manual/tr/function.mb-convert-case.php
Bu arada PHP8 çıktı, yayında. Daha iyi performans demiş ama henüz deneyemedim.
PHP 8.0, PHP dili için önemli bir güncellemedir.
https://www.php.net/releases/8.0/en.php
Optimizasyonlar ve yeni özellikler: Adlandırılmış Değişkenler, Union Types, Attributes, Kurucularda Özellik Tanımı, Match İfadesi, Nullsafe Operatorü, JIT(Anında Derleme) yanında tip sistemi, hata işleme ve tutarlılıkta iyileştirmeler içerir.
Bu arada bazen yukarıdaki kod ile çevirimde şapkalı i harfi sorunu olabiliyormuş, bu şekilde bir sorunla karşılaşırsanız testlerime göre final en iyi performanslı çalışan kod aşağıdaki gibi:
function ilkBuyukTR($str){
$str = mb_strtolower($str);
return str_replace('i̇','i',ltrim(mb_convert_case(str_replace(array('i','I'),array('İ','ı'),$str),MB_CASE_TITLE,'UTF-8')));
}
Kolay gelsin.